java - 如果配置文件设置不更改为 application-default.properties,如何忽略 application.properties 值
问题描述
我正在使用 spring 配置文件来加载基于环境的配置,并且在使用 Autowired Environment 对象读取时,它似乎是环境特定值的附加值,Spring 还从 application.properties 传递值,同样在 spring 文档Profile-specific Properties和在此答案中,但由于以下限制,我无法更改为 application-default.properties。
对我来说问题/限制是我正在使用的部署平台(规则),对于所有环境,标识符将作为 JVM 参数传递,但对于生产它不会被传递,如下所述
application-dev.properties --> DEV environment will pass this -Dspring.profiles.active=dev
application-qa.properties --> QA environment will pass this -Dspring.profiles.active=qa
application.properties --> PROD environment won't pass any argument
我现在拥有的选项是在 application.properties 中拥有其他环境特定属性文件(未使用事件)中具有空值的键并在代码中处理,除此之外还有其他优雅的方法可以在不更改 application.properties 的情况下进行处理
解决方案
正如链接文档(Profile-specific Properties)所说,application.properties
总是加载。
正如它还说的,如果没有设置活动配置文件(例如使用-Dspring.profiles.active
),default
配置文件将自动激活。
正如添加活动配置文件部分所述,您可以使用特定于配置文件的属性添加具有该spring.profiles.include
属性的活动配置文件。
这意味着您可以让default
配置文件属性文件激活prod
配置文件,如下所示:
文件application-default.properties
:
spring.profiles.include = prod
如果你有那个文件,那么在没有-Dspring.profiles.active
设置的情况下运行将从这些文件中加载属性(按顺序):
application-prod.properties
application-default.properties
application.properties
如果使用 运行-Dspring.profiles.active=dev
,则从这些文件中加载属性(按顺序):
application-dev.properties
application.properties
通过这样做,您现在为每个环境都拥有了一个命名良好的特定于配置文件的属性文件:
application-dev.properties --> since DEV environment passed -Dspring.profiles.active=dev
application-qa.properties --> since QA environment passed -Dspring.profiles.active=qa
application-prod.properties --> since PROD environment didn't pass -Dspring.profiles.active
该application.properties
文件仍被加载,并且应该包含所有非环境特定属性,即所有公共属性,以及可能具有环境特定值(覆盖)的任何全局属性的默认值。
这些application-<profile>.properties
文件可以添加特定于环境的属性,并且可以覆盖需要与文件中指定的默认值不同的值的全局属性application.properties
。
推荐阅读
- c++ - 使用 std::transform 最终向量保持为空
- python - spaCy - 按标签对实体进行排序的最有效方法
- arrays - 像“♠”这样的符号在谷歌表格公式中是什么意思?
- javascript - 在函数中插入警报
- optimization - 我想使用 16 比 1 MUX 将二进制代码转换为格雷码
- proxy - WSO2 集成工作室 - 无法配置代理
- javascript - Javascript FileReader 和文件同步
- json - 清单:行:1,列:1,语法错误
- django - 认证后登录页面
- java - 箭头 (->) 运算符优先级/优先级最低,还是赋值/组合赋值的优先级最低?