2013-03-07 70 views
4

在我的Spring應用程序中,我從應用程序外部加載application.properties文件,例如/user/home/properties/application.properties。文件中的值通過bean中的@Value註釋注入。我的新要求是能夠更改application.properties文件中的值並重新加載(或重新輸入)bean中的新值。Spring如何在運行時從application.properties重新加載值

在Spring 3.2中是這樣的可能嗎?

+1

看看這個:http://stackoverflow.com/questions/13248066/how-to-reload-properties-用彈簧。一旦Spring已經加載了bean,我不知道它是否可以修改它們或者替換它們。 – 2013-03-07 15:09:06

回答

0

在主類的獨立彈簧的應用程序,你可以做這樣的事情:

//load the appcontext with refresh value as false 
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(
        new String[] { "classpath:appcontext.xml" }, false); 
//add the props file 
context.getEnvironment().getPropertySources().addFirst(new ResourcePropertySource("classpath:app.properties")); 
//refresh the context 
context.refresh(); 

這樣做是加載在所有的屬性定義的屬性被稱爲內部的Spring上下文appcontext.xml文件,但不會在加載時刷新。然後它說,首先加載app.properties。那時只考慮app.properties中的值。然後刷新上下文。現在加載app.properties文件中的屬性值。有了這個,你不需要重建應用程序,你可以改變它的值並重新啓動應用程序

+1

這種方法的問題是每次在我的一個application.properties文件中進行更改時,我將不得不重新啓動應用程序。我正在尋找的解決方案是 - 能夠在運行時從application.properties文件刷新/重新加載新值,而無需重新啓動應用程序。 – jsf 2013-03-07 15:45:43

+0

這可能有助於 - http://www.morgan-design.com/2012/08/reloadable-application-properties-with.html – 2013-03-07 15:53:36

相關問題