4

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

我怎样才能获得正确的属性?

4

2 回答 2

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"

于 2013-03-05T17:05:25.327 回答
1

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

有人已经提出了这个要求:

通过“-Dspring.profiles.active”或其他 systemProperty 从命令行覆盖由 test 在运行时指定的 @ActiveProfile 的选项

我的评论:

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

于 2013-03-06T11:12:37.723 回答