El paquete JAR lee los archivos de configuración internos y externos del paquete jar, y el método para que Springboot lea los archivos de configuración externos (configuración de prioridad)

El paquete jar lee los archivos de configuración internos y externos del paquete jar, y el método para que Springboot lea los archivos de configuración externos 

Utilice la propiedad del sistema System.getProperty ("user.dir") para obtener el directorio donde se ejecuta el comando ( muchos en Internet dicen que el directorio actual del paquete jar es incorrecto )

Código fuente de ejemplo:

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class TestConfigPath {

    public static void main(String[] args) {
        String path = System.getProperty("user.dir");
        System.out.println(path);
        Properties properties = TestConfigPath.getProperties("application.properties");
        String activemqConnection = properties.getProperty("activemq.connection");
        System.out.println(activemqConnection);
    }

    public static Properties getProperties(String fileName) {
        try {
            String outpath = System.getProperty("user.dir")+File.separator+"config"+File.separator;//先读取config目录的,没有再加载classpath的
            System.out.println(outpath);
            Properties properties = new Properties();
            InputStream in = new FileInputStream(new File(outpath + fileName));
            properties.load(in);
            return properties;
        } catch (IOException e) {
            System.out.println(e.getMessage());
            try {
                Properties properties = new Properties();
                InputStream in = TestConfigPath.class.getClassLoader().getResourceAsStream(fileName);//默认加载classpath的
                properties.load(in);
                return properties;
            } catch (IOException es) {
                System.out.println(es.getMessage());
                return null;
            }
        }
    }
}

Nota: Si ejecuta en Docker y coloca el directorio de configuración en el mismo directorio que el jar, no podrá leerlo. Debe agregar una oración en el Dockerfile: ADD config / / config /

Entonces la ruta leída es: //config/application.properties

 

/config/application.properties
/config/application.properties (No existe tal archivo o directorio)

 

El archivo de configuración en la configuración de docker tiene una prioridad más alta que el paquete jar, y anulará la configuración predeterminada en el paquete jar. Al implementar en otros entornos de servidor, solo necesita modificar la configuración correspondiente.
La configuración de Dockerfile debe agregar: ADD config / / config /

 

El método para que Springboot lea archivos de configuración externos tiene las siguientes prioridades: La
primera es crear una carpeta de configuración en el directorio donde se ejecuta el comando. (Cree una carpeta de configuración en el mismo directorio del paquete jar y ejecute los comandos en el directorio del paquete jar) y luego coloque el archivo de configuración en esta carpeta.
El segundo es colocar directamente el archivo de configuración en el mismo directorio de nivel del paquete jar.
El tercero es crear una carpeta de configuración en la ruta de clase y luego poner el archivo de configuración en ella.
El cuarto es poner el archivo de configuración directamente debajo de la ruta de clases.
De forma predeterminada, springboot lee primero un archivo config / application.properties en su propio directorio en el mismo nivel.
El archivo application.properties creado en la carpeta src / main / resources tiene la prioridad más baja

Entonces, cuando springboot comienza a leer archivos de configuración externos, solo necesita agregar una capa de archivos de configuración para anular los predeterminados sin modificar el código.

 

 

 

 

Supongo que te gusta

Origin blog.csdn.net/bj_chengrong/article/details/103185706
Recomendado
Clasificación