2016-04-04 10 views
2

スプリング3.2.5を使用しています。 私は2つのアプリケーションコンテキスト(もう一方の親)を持つWebプロジェクトを持っています。私が設定さスプリング環境でプレースホルダを解決できません

は、XMLでは、このようなプレースホルダコンフィギュア:

<context:property-placeholder location="WEB-INF/properties/*.properties, classpath:local.config.properties, file:${global.config.file}" 
           ignore-unresolvable="true" 
           ignore-resource-not-found="false"/> 

変数「global.config.fileは、」Tomcatを起動するために渡されたJVM引数で指定されたファイルへのパスです。私のコードで

、私は正常にこのようにそれらのファイルから値を挿入することができます

@Value("${blabla}") 
private String blabla; 

をしかし、私はプログラム的にプレースホルダを解決しようとすると、春のEnvironmentオブジェクトを経由して、プレースホルダを実際の値に置き換えされていません。やって、また、 "$ {} blabla" :

@Inject 
Environment env; 
// ... 

public void test() { 
    String blabla = env.resolvePlaceholders("${blabla}"); 
} 

blabla変数

それはだ未解決の値が含まれます

env.getProperty("blabla"); 

を返します。私が3.0を超えるコンテキストスキーマの場所を使用してい 注:

http://www.springframework.org/schema/context/spring-context-3.2.xsd 

誰かが私が欠けているものを理解するのに役立つことはできますか? また、さらにデバッグする方法についての手掛かりはありますか?

+0

設計されたとして、それが動作するようにデバッグするためには何もありません。登録された 'PropertySourcesPlaceholderConfigurer'は、環境を使用して、ロードされたファイルから見つけることができないプロパティを検索します。あなたが '@Configuration'クラスを必要とし、' @ PropertySource'アノテーションを 'Environment'に追加されたものとして追加したいのであれば、ロードされたプロパティを' Environment'に追加しません。 –

+0

あなたはプログラムでリソースを手に入れることができればいいですか?その場合は、[this](http://stackoverflow.com/questions/13265545/using-reloadableresourcebundlemessagesource-in-annotations-injection)をチェックしてください。私は現在、この方法でこれを使用しており、プロパティーファイルに対しても機能します。 – dambros

+0

はい、実行時にプレースホルダを使用して文字列式を解決したいと考えています。 M. Deinum:PropertySourcesの手動定義によって名前空間タグを置き換えると、それは機能するでしょうか?私はそれも春の設定ファイルで動作する必要があります。 – baraber

答えて

0

は例えば、classpath*:で試してみてください:

<context:property-placeholder location="classpath*:WEB-INF/properties/*.properties, classpath*:local.config.properties, file:${global.config.file}" 
          ignore-unresolvable="true" 
          ignore-resource-not-found="false"/> 
関連する問題