使用spring boot创建分层属性文件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用spring boot创建分层属性文件相关的知识,希望对你有一定的参考价值。
我们有一个包含三个资源文件的项目 - application-dev.properties
application-test.properties
和application-prod.properties
。我们有一个环境变量来设置我们所处的环境的名称,然后我们使用计算的占位符加载正确的属性文件,如下所示:
@Configuration
@PropertySource("classpath:application-${environment}.properties")
public class ApplicationConfiguration {
}
我希望添加一个新文件application-defaults.properties
,它将具有所有默认属性,并且只有特定环境属性才会覆盖application-${environment}.properties
中出现的符号。我尝试按如下方式进行:
@Configuration
@PropertySource({"classpath:application-defaults.properties", "classpath:application-${environment}.properties"})
public class ApplicationConfiguration {
}
事实上,默认文件中的属性总是“赢”并优先,而我希望在属性出现在指定的环境变量中时覆盖它们。我尝试在它们之间切换顺序,但它仍然保持不变。我甚至试图将默认文件的名称更改为default.properties
,以便了解加载顺序是否是词典或类似的东西,但仍然 - default.properties
总是赢。
注意:为了加载应用程序,我们使用spring-boot。
您可以不使用占位符
在application.properties
中,指定所有配置文件通用的属性。在application-xxx.properties
中,指定特定配置文件的属性。
然后在spring.profiles.active: xxx
中通过application.properties
激活配置文件或添加JVM参数-Dspring.profiles.active=xxx
在application-xxx.properties
宣布的财产将优先于在application.properties
宣布的财产
属性在Spring Boot中是分层的,下面是如何实现您想要做的:
application.properties (or application.yml) #this file contains all default properties
application-dev.properties (or application-dev.yml) #contains dev properties and can override properties in application.yml
application-prod.properties (or application-prod.yml) #same as above
我个人更喜欢.yml扩展,这可以避免冗余。
如果需要多级分层配置文件,可以使用spring.profiles.include属性。
第一级中的每个配置文件都从application.properties扩展属性,在第二级中,您可以在第一行中设置spring.profiles.include以从第一级扩展。
例如:
- 默认配置文件 application.properties
- 一级资料: application-dev.properties application-prod.properties
- 二级资料: application-prod-aws.properties application-prod-azure.properties application-prod-openshift.properties
以上是关于使用spring boot创建分层属性文件的主要内容,如果未能解决你的问题,请参考以下文章
在Spring Boot中使用 @ConfigurationProperties 注解
Spring boot:thymeleaf 没有正确渲染片段