0

我问了一个类似的问题,但根据回答,我在描述我所追求的方面做得不好。我有一个从属性文件加载属性的 spring 4 webapp。我们通过 spring 中的 "${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> 
4

1 回答 1

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>
于 2016-03-08T16:06:00.100 回答