我有一个springboot项目,我正在为它注入价值观 application.yml
通过 application.properties
(这种设计对我来说很有意义,因为有很多微服务和 application.properties
实际上是一个符号链接)如下所示:
在 application.properties
:
PROPERTY_YAML=something
然后在 application.yml
:
app:
property:
yaml: ${PROPERTY_YAML}
这工作很好,当我通过 Environment.getProperty
或通过 @Value
一切正常。但是,当我尝试以相同的方式设置Spring轮廓时,它不起作用。设置 SPR_PROFILE=my_profile
在 application.properties
以及 application.yml
作为
spring:
profiles:
active: ${SPR_PROFILE}
导致Spring不一致时 Environment.activeProfiles
退货 ${SPR_PROFILE}
(spring正在这个配置文件下运行)和 Environment.getProperty("spring.profiles.active")
退货 my_profile
.
这是预期的行为吗?为什么?spring是否在实际解析/替换占位符之前加载配置文件?
我目前的解决方法是 spring.profiles.active=my_profile
在 application.properties
但我想知道,为什么Spring会这样。
1条答案
按热度按时间ws51t4hk1#
我不能回答具体的问题,但我不会两者都用
application.properties
以及application.yml
根据spring文档,两者具有相同的优先级,无法保证哪一个先加载:在打包的jar之外配置特定于应用程序的属性(application-{profile}.properties和yaml变体)。
打包在jar中的特定于概要文件的应用程序属性(application-{profile}.properties和yaml变体)。
打包jar之外的应用程序属性(application.properties和yaml变体)。
打包在jar中的应用程序属性(application.properties和yaml变体)。
我会把所有的共享属性放在一个自定义的
*.properties
文件-最好是配置文件(例如。applicaion-dev.properties
)并使用spring的各种方法之一激活该概要文件,这应该保证在默认属性之前加载。