当属性文件发生变化时,如何重新加载Spring4上下文?
实际上我使用@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 :(得分:1)
你不想那样。许多应用程序依赖于应用程序上下文的单例bean在整个应用程序生命周期中是相同的。但是可以要求任何bean重新加载一些值,或者你可以将singleton bean的一些属性代理到协议的属性,这些属性将在每次调用时从头开始重建。
我认为您有一个完全可以接受的设计问题,但解决方案是不按需从PropertyPlaceholderConfigurer
中提取的值进行重新加载。使用框架来擅长什么,不要试图让他们做他们的开发人员无法想象的事情。
答案 1 :(得分: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" ) );
...
}
我认为在系统首次启动时以及在所有执行期间都会使用这些属性。我不认为你的方法是不可能的,但它会很复杂。
如果属性不断变化,您必须考虑使用一些数据源。