O pacote JAR lê os arquivos de configuração internos e externos do pacote jar, e o método para springboot ler os arquivos de configuração externos (configuração prioritária)

O pacote jar lê os arquivos de configuração internos e externos do pacote jar, e o método para springboot ler os arquivos de configuração externos 

Use a propriedade do sistema System.getProperty ("user.dir") para obter o diretório onde o comando é executado ( muitos na Internet dizem que o diretório atual do pacote jar está errado )

Exemplo de código-fonte:

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;
            }
        }
    }
}

Observação: se você executar no docker e colocar o diretório config no mesmo diretório que o jar, não será possível lê-lo. Você precisa adicionar uma frase no Dockerfile: ADD config / / config /

Então, o caminho lido é: //config/application.properties

 

/config/application.properties
/config/application.properties (nenhum arquivo ou diretório)

 

O arquivo de configuração no docker config tem uma prioridade mais alta do que o pacote jar e substituirá a configuração padrão no pacote jar. Ao implantar em outros ambientes de servidor, você só precisa modificar a configuração correspondente.
A configuração do Dockerfile precisa adicionar: ADD config / / config /

 

O método para springboot ler arquivos de configuração externos tem as seguintes prioridades: A
primeira é criar uma pasta de configuração no diretório onde o comando é executado. (Crie uma pasta de configuração no mesmo diretório do pacote jar e execute os comandos no diretório do pacote jar) e, em seguida, coloque o arquivo de configuração nesta pasta.
A segunda é colocar diretamente o arquivo de configuração no mesmo diretório de nível do pacote jar.
A terceira é criar uma pasta de configuração sob o classpath e, em seguida, colocar o arquivo de configuração nela.
A quarta é colocar o arquivo de configuração diretamente sob o classpath.
Por padrão, o springboot primeiro lê um arquivo config / application.properties em seu próprio diretório no mesmo nível.
O arquivo application.properties criado na pasta src / main / resources tem a prioridade mais baixa

Portanto, quando springboot começa a ler arquivos de configuração externos, você só precisa adicionar uma camada de arquivos de configuração para substituir os padrões sem modificar o código.

 

 

 

 

Acho que você gosta

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