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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用spring boot创建分层属性文件相关的知识,希望对你有一定的参考价值。

我们有一个包含三个资源文件的项目 - application-dev.properties application-test.propertiesapplication-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 没有正确渲染片段

Spring boot分层和基本概念

Spring boot分层和基本概念

使用 Spring Boot 框架对基于 Spring JPA 的 DAO 进行分层的正确方法

Spring Boot 容器镜像分层构建