如何在未更改应用程序的情况下设置配置文件时忽略 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
文件中指定的默认值不同的值的全局属性。
我正在使用 spring 配置文件来加载基于环境的配置,当使用 Autowired Environment 对象读取时,它似乎是环境特定值的附加值,Spring 也传递来自 [=21= 的值],spring 文档 Profile-specific Properties and also here in this
对我来说,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
文件中指定的默认值不同的值的全局属性。