2011-07-13 30 views
1

我是Spring框架的新手,嘗試查看是否可以找到運行時加載現有PropertyPlaceholderConfigurer實例上的新Properties對象的解決方案。在Spring中運行時加載屬性PropertyPlaceholderConfigurer

我開始通過擴展Sp​​ring的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只有一個值是一個網址(我做一個GET請求來獲取更多的屬性)。沒有這個提取,我的context.xmls中沒有佔位符可以解析。

有沒有一種方法可以告訴我的VaultPropertyPlaceholderConfigurer在創建過程中調用方法 1st。解決硬編碼值 - 導致第二個URL爲 。發出GET請求並加載獲取的結果。

+0

我們通過擴展PropertyPlaceholderConfigurer來解決這個問題。我們使用了一個java.util.Timer來讓類檢查.properties文件每隔X分鐘發生的變化,如果重新加載它,你可以使用processProperties方法加載你從get中獲取的屬性碼。當然,這是一個樣板化的解決方案,如果有一個春天的實現能夠完成這個任務,我會坦率地忽略它。另外,所有新加載的屬性在Bean創建期間都不可用,這讓我想知道爲什麼你要在第一時間做到這一點? – Chepech

+0

感謝chepech,我別無選擇,只能用這種方式......或者現在這就是我想的唯一方法。 – Fallrookie

回答

0

如何在兩個階段加載屬性。使用第二個bean這樣從URL資源首先加載的bean,然後負載特性的startup.properties:在第一個豆

<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> 

屬性「命令」將使它比初始化二號豆,這將使可用於早期的網址在第二個bean中的佔位符解析。作爲使用「order」第二個bean的替代方法,可以使用depend-on =「firstOrderProperties」聲明,以在1st bean之後初始化它。

該解決方案將讓您避免實現PropertyPlaceholderConfigurer的子類的需要。

相關問題