2011-07-13 9 views
1

私はSpringフレームワークには新しく、既存のPropertyPlaceholderConfigurerインスタンスに新しいPropertiesオブジェクトのランタイムロードの解決策が見つかるかどうかを確認しようとしています。Spring PropertyPlaceholderConfigurerでのプロパティのランタイムロード

<bean class="com.myl.spring.VaultPropertyPlaceholderConfigurer"> 
<property name="ignoreUnresolvablePlaceholders" value="true" /> 
<property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" /> 
<property name="locations"> 
    <list> 
    <value>classpath*:startup.properties</value> 
    </list> 
</property> 
</bean> 

startup.propertiesを次のように私は...春のPropertyPlaceholderConfigurerを拡張することにより開始し、有線

は、URL(私は複数のプロパティを取得するためにGETリクエストを作る)である一つの値だけを持っています。このフェッチがなければ、私のcontext.xmlのプレースホルダは解決できません。

作成中にVaultPropertyPlaceholderConfigurerがメソッドを呼び出す方法は、 にありますか。ハードコードされた値を解決すると、URLが になります。 GETリクエストを作成し、取得した結果をロードします。

+0

PropertyPlaceholderConfigurerを拡張することでこれを一度修正しました。私たちはjava.util.Timerを使用して、クラスがX分ごとに.propertiesファイルの変更をチェックするようにしました。もし何か違うものがあった場合は、processPropertiesメソッドを使ってgetから取得したプロパティコード。もちろん、これは定型的な解決策ですが、それを達成する春の実装があれば、正直に無視しています。 Beanの作成中に新しいロードされたプロパティもすべて使用できなくなります。なぜなら、最初にBeanを作成しようとしているのでしょうか? – Chepech

+0

おかげでchepech、私は選択肢がなく、この方法を実装する...または今すぐthats私が考えている唯一の方法です。 – Fallrookie

答えて

0

プロパティを2段階で読み込む方法はありますか?まず、このように二Beanを使用してURLリソースから1つの豆、負荷のプロパティで、あなたのstartup.propertiesをロードする:第一Bean内の

<bean id="firstOrderProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="order" value="100" /> 
    <property name="location" value="classpath*:startup.properties" /> 
</bean> 

<bean id="fromUrlProperties" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="location" value="${placeholder name from startup.properties}" /> 
</bean> 

プロパティ「ためには」それはのためのURLが利用できるようになります第二豆よりも先に初期化するようになります2番目のBeanのプレースホルダー解決。 2番目のbeanは、 "order"を使う代わりに、1番目のbeanの後にそれを初期化するために、depend-on = "firstOrderProperties"で宣言することができます。

このソリューションを使用すると、PropertyPlaceholderConfigurerのサブクラスを実装する必要がなくなります。

関連する問題