如何在未更改应用程序的情况下设置配置文件时忽略 application.properties 值-default.properties

How to ignore application.properties values if profile set without changing to application-default.properties

我正在使用 spring 配置文件来加载基于环境的配置,当使用 Autowired Environment 对象读取时,它似乎是环境特定值的附加值,Spring 也传递来自 [=21= 的值],spring 文档 Profile-specific Properties and also here in this 中也提到了同样的内容,但由于以下限制,我无法更改为 application-default.properties。

对我来说,problem/limitation 是我正在使用的部署平台(规则),对于所有环境,标识符将作为 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 配置文件将自动激活。

Adding Active Profiles 部分所述,您可以使用 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 文件仍在加载,并且应该包含所有非特定于环境的属性,即所有 common 属性,以及 可能具有环境特定值(覆盖)的任何全局属性的默认值

application-<profile>.properties 文件可以添加特定于环境的属性,并且可以覆盖需要与 application.properties 文件中指定的默认值不同的值的全局属性。