Prefácio:
O arquivo de configuração spring-boot usa o arquivo de configuração application.properties ou application.yml por padrão e especifica spring.profiles.active = dev, você pode carregar application-dev.properties adicionais, estes são conhecimentos de bom senso, então, se eu deseja Existe alguma maneira de carregar um arquivo diferente de application.properties como um arquivo de configuração?
1. Personalize a forma de carregar o arquivo de configuração
Existem 3 maneiras de personalizar o carregamento de arquivos de configuração
1. Via @PropertySource
Use @PropertySource ("test.properties") na classe de inicialização. Nota: Se você quiser usar várias classes de inicialização para carregar arquivos de configuração diferentes na inicialização, este método carregará o arquivo de configuração da classe de inicialização que não foi iniciada , e se houver O arquivo de configuração principal existe (o arquivo de configuração principal é o arquivo de configuração especificado por application.properties ou profiles), e o arquivo de configuração principal deve prevalecer em caso de conflitos de propriedade.
2. Por meio de springApplication.setDefaultProperties (prop)
O peso da configuração deste método e do método 1 também é o mesmo, e também será substituído pela configuração principal. Para o método de configuração, consulte o código a seguir
newSpringApplicationSetDefProps(Application.class, "test.properties").run()
}
/**
* 自定义配置文件方式二:优先级小于主配置文件 (需要在主配置文件不存在使用)
*/
public static SpringApplication newSpringApplicationSetDefProps(Class<?> clazz, String path) {
SpringApplication springApplication = new SpringApplication(clazz);
Properties prop = new Properties();
InputStream in = clazz.getClassLoader().getResourceAsStream(path);
try {
prop.load(in);
} catch (IOException e) {
e.printStackTrace();
}
springApplication.setDefaultProperties(prop);
return springApplication;
}
3. Através do método de variáveis independentes do programa
Valor do argumento : --spring.config.name = test
Método de configuração:
1) Na configuração de execução ou depuração do método principal do eclipse, localize a segunda guia e inclua os argumentos do programa.
2) Use o método principal para definir a matriz args
args = new String[] {"--spring.config.name=test"};
SpringApplication.run(Application.class, args);
Em segundo lugar, a ordem de prioridade
1. Teste de prioridade
/**
* spring-boot资源文件加载方式和优先级等测试demo
*
* ShowController代码
*
* @Autowired private User user; // 通过@ConfigurationProperties加载配置属性
*
* @Value("${server.port}") // 通过@value加载配置属性 private int port;
*
* @GetMapping("/show") public String show() {
* System.out.println(user.getName());
* System.out.println(user.getTitle()); System.out.println(port);
* return "结果";
* }
*
* 1、测试方案1: 主资源文件端口设置server.port=8088, 附属资源文件也设置端口server.port=8090, 运行时查看启动端口值
* 结论: 主资源文件端口配置会覆盖掉附属增加的资源文件配置。
*
* 2、测试方案2:去掉PropertySource,采用properties加载资源文件并且设置到SpringApplication,进行运行。
* 结论:和测试方案1一致。 通过setDefaultProperties端口会被主配置覆盖。
*
* 3、测试方案3:删除掉默认的application.properties,只从properties或@PropertySource进行加载资源文件
* 结论:端口设置会按照指定的properties文件加载
*
* ------1-3总结: 配置文件分为主配置文件,和附属配置文件,主配置文件优先级高于附属配置,另外setDefaultProperties加载的也是附属的配置(会被主配置覆盖)。
*
* 4、测试方案4:设置--spring.config.name=test2的程序自变量,并且改回默认的application.proerties文件。
* 结论:设置--spring-config.name=test2的程序自变量,会重新设定主配置文件的名称为test2.properties的文件
*
* 另外通过--server.port=9090程序自变量方式设置的配置,优先级高于配置文件。
*
*/
@SpringBootApplication
// @PropertySource("test.properties")
public class Application {
/**
* --spring.config.name=test2 指定配置文件的自变量 (可替换主配置文件名)
* --server.port=9090 指定启动端口的自变量 (优先级高于配置文件)
*/
public static void main(String[] args) {
for (String string : args) {
System.out.println(string);
}
SpringApplication.run(Application.class, args);
// runSetDefaultProperties("test.properties", args);
}
public static void runSetDefaultProperties(String path, String[] args) {
Properties props = new Properties();
InputStream inputStream = Application.class.getClassLoader().getResourceAsStream(path);
try {
props.load(inputStream);
} catch (IOException e) {
e.printStackTrace();
}
SpringApplication app = new SpringApplication(Application.class);
app.setDefaultProperties(props);
app.run(args);
}
}
2. Conclusão da ordem de prioridade
Argumentos do programa> arquivo de configuração principal (pode ser modificado por --spring.config.name = test)> outros arquivos de configuração de configurações