2016-07-05 129 views
0

如何在属性文件更改时重新加载Spring4上下文?如何在属性文件更改时重新加载Spring 4上下文

其实我用@Value("$param{myParam}")和我得到的占位符从我的applicationContext.xml这样的:

<bean id="param-PropertyPlaceholder" 
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer" 
    p:location="file:${confdir}/parameters.properties" p:placeholder-prefix="$param{" /> 

怎么能当我的属性文件改变了我的@Value变化?其实我必须重新启动我的应用程序才能看到更改。

+0

可能的重复http://stackoverflow.com/questions/7599449/springframework-propertyplaceholderconfigurer – aksappy

+0

我不想设置一个计时器来做到这一点。用本地Spring类没有办法做到这一点? –

+0

PropertyPlaceholderConfigurer仅在应用程序启动时加载。 – aksappy

回答

0

我将创建该提议,并决定何时将执行的方法...

@Autowired 
private MyBean1 myBean1 

@Autowired 
private MyBean2 myBean2 

public void loadNewProperties() { 
    // Read new properties into newProps 
    ... 
    // Load the new properties into bean fields 
    myBean1.setPropertyA(newPropsp.getProperty("property.A")); 
    myBean2.setPropertyB(newPropsp.getProperty("property.B")); 
    ... 
} 

我想在系统启动时首次属性的使用和所有的执行过程中。我不认为你的方法是不可能的,但它会很复杂。

如果属性不断变化,则必须考虑使用一些数据源。

1

你不想那样。许多应用程序依赖于应用程序上下文的单例bean在整个应用程序生命周期中都是相同的。但是任何bean都可以被要求重新加载一些值,或者你可以代理单身bean的一些属性来协调那些将在每次调用时从头开始重建的属性。

我认为你有一个完全可以接受的设计问题,但解决的办法是从一个PropertyPlaceholderConfigurer提取值的需求重装。用他们擅长的框架来使用框架,并且不要试图让他们做他们的开发人员无法想象的事情。

相关问题