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

誰かがすでにこれをリクエストしています:

ランタイムのテストで指定された @ActiveProfile を、コマンド ラインから「-Dspring.profiles.active」または他の systemProperty でオーバーライドするオプション

私のコメント:

それまたはプロパティ spring.profiles.active を設定する必要があります。

于 2013-03-06T11:12:37.723 に答える