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.