使用 spring boot 创建分层属性文件

Avi*_*Avi 1 spring properties

我们有一个包含三个资源文件的项目 -application-dev.properties application-test.propertiesapplication-prod.properties. 我们有一个环境变量,用于设置我们所在环境的名称,然后我们使用计算占位符加载正确的属性文件,如下所示:

@Configuration
@PropertySource("classpath:application-${environment}.properties")
public class ApplicationConfiguration {

}
Run Code Online (Sandbox Code Playgroud)

我希望添加一个新文件application-defaults.properties,该文件将具有所有默认属性,并且只有出现在其中的属性application-${environment}.properties才会被特定环境属性覆盖。我尝试这样做:

@Configuration
@PropertySource({"classpath:application-defaults.properties", "classpath:application-${environment}.properties"})
public class ApplicationConfiguration {

}
Run Code Online (Sandbox Code Playgroud)

事实是,默认文件中的属性总是“获胜”并优先,而我希望它们被覆盖,以防属性出现在指定的环境变量中。我尝试在它们之间切换顺序,但它仍然保持不变。我什至试图将默认文件的名称更改为default.properties只是为了了解加载顺序是按字典顺序还是类似的顺序,但仍然 -default.properties总是获胜。

注意:为了加载应用程序,我们使用 spring-boot。

Jwo*_*Ker 5

如果您想要多级分层配置文件,您可以使用 spring.profiles.include 属性。

第一级中的每个配置文件都从 application.properties 扩展属性,在第二级中,您可以在第一行中设置 spring.profiles.include 以从第一级扩展。

例如:

  • 默认配置文件:

    • 应用程序属性
  • 一级简介:

    • 应用程序-dev.properties
    • application-prod.properties
  • 二级简介:

    • application-prod-aws.properties
    • application-prod-azure.properties
    • application-prod-openshift.properties