@ActiveProfile和spring.profiles.active

时间:2013-03-05 16:01:40

标签: spring properties configuration applicationcontext profiles

这是我的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在这种情况下似乎没有得到解决。

我怎样才能获得合适的属性?

2 个答案:

答案 0 :(得分:1)

这是因为系统属性可以激活活动配置文件 (但在@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"

答案 1 :(得分:1)

见票证:https://jira.springsource.org/browse/SPR-8982#comment-88498

有人已提出要求:

  

通过“-Dspring.profiles.active”或其他systemProperty

覆盖命令行在运行时由test指定的@ActiveProfile的选项

我的评论:

  

那或它应该设置属性spring.profiles.active。