如何使用Spring Boot应用程序中另一个属性文件中的值解析属性文件中的占位符
我的spring boot应用程序具有以下属性文件。
My spring boot application has below properties files.
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中的占位符。
Is it possible to load "common/env.properties" so that it's placeholders will be resolved using the given environment specific properties file. For DEV environment, we want the placeholders in "common/env.properties" to be resolved using values from "DEV/env.properties".
关于如何可以加载多个属性文件和基于配置文件的加载,但无法找到此特定用例的答案。
There are answers about how to load multiple properties files and profile based loading but could not find an answer for this particular use case.
预先感谢。
2个选项:
- 生成
common / application.properties
使用configuration-maven-plugin
并为每个环境过滤文件。 - 在每个环境中使用
application-< env> .properties
并传递-Dspring.profiles.active =< env>
作为应用程序启动中的VM选项。 Spring将自动从正确的文件中获取属性。
- Generate the
common/application.properties
usingconfiguration-maven-plugin
and filter files for each environment. It is outdated now. - Use
application-<env>.properties
for each environment and pass the-Dspring.profiles.active=<env>
as VM option in application start up. Spring will automatically take the property from correct file.
在选项2中,您将使用application-.properties覆盖application.properties中存在的内容。因此,您不必仅添加每个环境需要更改的属性。
In option 2, you will be overwriting whatever is present in application.properties with application-.properties. So you dont have to add only the properties which you need to change per environment.
例如:
您的 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 配置文件,春季需要
which means, when you are starting application using dev
profile, spring takes
logging.level.root=WARN
logging.level.org.apache=WARN
logging.level.org.springframework=DEBUG
edit:
此外,您可以在课堂上尝试以下类似的方法。 (Spring将使用config-dev.properties中的值覆盖config.properties中的值)。 ignoreResourceNotFound
将确保即使没有找到相应的文件,应用程序仍将以默认值启动。
Also, you can try something like below on your class. (Spring will overwrite value in config.properties with values from config-dev.properties). ignoreResourceNotFound
will make sure, application will still start with default values even if the corresponding file is not found.
@Configuration
@PropertySource("classpath:config.properties")
@PropertySource(value = "classpath:config-${spring.profiles.active}.properties", ignoreResourceNotFound = true)