2016-03-08 77 views
0

我問了一個類似的問題,但根據回答,我做了一個糟糕的工作,描述了我後。我有一個spring 4 webapp從屬性文件加載屬性。我們在春天通過「$ {proper.name」}表達式來使用這些屬性,並且通過在我們的一些類中注入一個屬性對象。從數據庫和屬性彈出配置屬性

我們希望將大部分屬性移動到數據庫表並使它們可以重新加載。但是,有些需要留在本地屬性中,可能會覆蓋數據庫設置。這些也應該在應用程序運行後動態加載。

我知道,一旦某個特定的bean被注入,它將不會被重新加載,這與我無關,這取決於該模塊的處理。但是我很難得到我想要的行爲。特別是,我已經從apache commons配置中實現了一個AbstractConfiguration,以獲得雙重源代碼並覆蓋了我之後的版本。但是,雖然它用於注入屬性對象,但使用「$ {prop.name}」加載的表達式完全不起作用。

我該如何讓他們工作?我忽略了錯誤的東西嗎?它只是一些配置細節?

<bean id="sysProperties" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="targetObject" ref="databaseConfigurator" /> 
    <property name="targetMethod" value="getProperties"/> 
</bean> 

<bean id="databaseConfigurator" class="my.util.config.MyDatabaseConfigurator"> 
    <property name="datasource" ref="dataSource" /> 
    <property name="propertyFile" value="/WEB-INF/my.properties" /> 
    <property name="applicationName" value="ThisApp" /> 
</bean> 

<bean id="dbConfigFactory" class="org.apache.commons.configuration.ConfigurationConverter" factory-method="getProperties"> 
    <constructor-arg ref="databaseConfigurator" /> 
</bean> 
+0

的可能的複製[在數據庫中存儲的屬性,但是局部覆蓋](http://stackoverflow.com/questions/35850768/store-properties-in-database-but-override-locally) – JEY

+0

我不我想這是因爲我問了這個問題,我想我的工作做得不好。這個問題的答覆者被困在了jndi問題上,因爲我在這個問題上過多地關注了這個問題。結果是我沒有得到有用的答案。所以我改述了。 @JEY – user1187719

回答

0

我沒有測試過這個,但我認爲它可能工作。

<bean id="sysProperties" class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> 
    <property name="targetObject" ref="databaseConfigurator" /> 
    <property name="targetMethod" value="getProperties"/> 
</bean> 

<bean id="databaseConfigurator" class="my.util.config.MyDatabaseConfigurator"> 
    <property name="datasource" ref="dataSource" /> 
    <property name="propertyFile" value="/WEB-INF/my.properties" /> 
    <property name="applicationName" value="ThisApp" /> 
</bean> 



<bean name="PropertyPlaceholderConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"> 
    <property name="properties" ref="CommonsConfigurationFactoryBean"/> 
</bean> 

<bean name="CommonsConfigurationFactoryBean" class="org.springmodules.commons.configuration.CommonsConfigurationFactoryBean"> 
     <constructor-arg ref="databaseConfigurator"/> 
</bean> 
+0

org.springmodules.commons http://mvnrepository.com/artifact/org.springmodules/spring-modules-jakarta-commons – MarkOfHall

+0

我還沒有嘗試過springmodules子包,但結果看起來差不多($ { }表示法屬性不起作用,包括數據源上的jndi名稱)。這基本上是apache commons配置的衍生物嗎? MyDatabaseConfigurator繼承自org.apache.commons.configuration.AbstractConfiguration。也許有一個我需要繼承的springmodules變體? – user1187719

+0

你需要添加更多的細節問題。你在哪裏使用$ {}符號?您還需要提供有關您的spring配置的更多詳細信息。是否涉及多個Spring上下文?是否在與PropertyPlaceholderConfigurer相同的上下文中使用$ {}的bean? – MarkOfHall