这是我的applicationContext定义的一部分,用于检索一些属性。
<!-- get some properties -->
<context:property-placeholder
ignore-resource-not-found="false" ignore-unresolvable="false"
location="classpath:/properties/${spring.profiles.active:test}/some.properties"/>
可以看到,我让spring.profiles.active决定读取哪些属性。我的测试用注释:
@ActiveProfile("integration")
您猜对了,我的spring bean配置文件实际上与部署/测试应用程序的环境相匹配。仍然我的位置属性被解析为"/properties/test/some.properties"。这当然是因为spring.profiles.active在这种情况下似乎没有得到解决。
我怎样才能获得正确的属性?
这是因为活动配置文件可能被系统属性激活(但在@ActiveProfiles
的情况下,它以另一种方式工作)。
就像这样:
<beans profile="dev,prod,qa">
<context:property-placeholder location="classpath:some.properties" ignore-unresolvable="true"/>
</beans>
<beans profile="test">
<context:property-placeholder location="classpath:some-test.properties" ignore-unresolvable="true"/>
</beans>
同样,您可以尝试更改location="classpath:/properties/${spring.profiles.active:test}/some.properties"
来location="classpath:/properties/${spring.profiles.active}/some.properties"
参见票证:https://jira.springsource.org/browse/SPR-8982#comment-88498
有人已经做了这个请求:
一个选项,覆盖由test在运行时从命令行通过"- spring.profiles "指定的@ActiveProfile。active"或其他systemProperty
我的评论:
它应该设置属性spring.profiles.active.