我的spring启动应用程序具有以下属性文件。
src/main/resources/config/DEV/env.properties
mail.server=dev.mail.domain
src/main/resources/config/QA/env.properties
mail.server=qa.mail.domain
src/main/resources/config/common/env.properties
mail.url=${mail.server}/endpoint
是否可以加载“common / env.properties”,以便使用给定的特定于环境的属性文件解析占位符。对于DEV环境,我们希望使用“DEV / env.properties”中的值来解析“common / env.properties”中的占位符。
有关如何加载多个属性文件和基于配置文件的加载的答案,但无法找到此特定用例的答案。
提前致谢。
2选项:
common/application.properties
生成configuration-maven-plugin
并为每个环境过滤文件。现在已经过时了。application-<env>.properties
,并在应用程序启动时将-Dspring.profiles.active=<env>
作为VM选项传递。 Spring将自动从正确的文件中获取属性。在选项2中,您将使用application-.properties覆盖application.properties中存在的任何内容。因此,您不必仅添加每个环境需要更改的属性。
例如:
你的application.properties
可以有
logging.level.root=WARN
logging.level.org.apache=WARN
logging.level.org.springframework=WARN
你的application-dev.properties
可以有
logging.level.org.springframework=DEBUG
这意味着,当您使用dev
配置文件启动应用程序时,spring需要
logging.level.root=WARN
logging.level.org.apache=WARN
logging.level.org.springframework=DEBUG
编辑:
此外,您可以在课堂上尝试类似下面的内容。 (Spring将使用config-dev.properties中的值覆盖config.properties中的值)。 ignoreResourceNotFound
将确保,即使找不到相应的文件,应用程序仍将以默认值启动。
@Configuration
@PropertySource("classpath:config.properties")
@PropertySource(value = "classpath:config-${spring.profiles.active}.properties", ignoreResourceNotFound = true)
您可以添加resources / application.yml文件,您可以在一个文件中包含多个配置文件。 MultiProfile Yaml例如两个不同的配置文件'dev'和'qa',具有不同的applicationNames'DEV'和'QA'以及一个defaultName'Default'
spring:
application:
name: Default
profiles:
active: qa
---
spring:
profiles: dev
application:
name: DEV
---
spring:
profiles: qa
application:
name: QA
您可以通过在类配置上声明属性源并在路径中设置环境变量来实现此目的:
@PropertySource({ "classpath:config/${env}/env.properties" })
@Configuration
public class config{}
然后使用命令行变量-env=dev
启动spring boot应用程序
UPDATE
您可以使用@PropertySources批注来加载多个属性。
@PropertySources({
@PropertySource("classpath:config/${env}/env.properties"),
@PropertySource("classpath:config/common/env.properties")
})
public class config{}