2014-09-25 28 views
1

在春天,你可以使用注入的環境對象讀取所有環境屬性如何改變/更新/刪除屬性在ConfigurableEnvironment春季

@Resource 
private org.springframework.core.env.Environment environment; 

所以,問題是我可以編程修改某些屬性的值?

我看到的唯一解決方法是獲取包含此屬性的所有MutablePropertySource。從環境中完全刪除該源,並添加一個新的PropertySource,該PropertySource包含前一個+所更改的(或已刪除的)的所有屬性。

然而這個看起來醜陋和將是緩慢的;(

+0

爲什麼您無論如何要更改屬性,屬性都應該始終保持不變,你仍然可以使用AOP來做到這一點,你的建議而已。如果它與你想改變的鍵相匹配的參數值只是返回新值 – varun 2014-09-25 08:36:26

+0

好吧我想給我的網站的某些「管理員」更改屬性的能力,無需重新啓動並且無需訪問到屬性文件或機器 – JOKe 2014-09-25 09:20:55

+0

,這實際上更新了屬性文件中的值? – varun 2014-09-25 09:28:57

回答

0
// ConfigurableEnvironment env 
MutablePropertySources propertySources = env.getPropertySources(); 
Map<String, Object> map = new HashMap<>(); 
map.put(myObject.getKey(), 
      myObject.getQuery()); 
propertySources 
      .addFirst(new MapPropertySource("newmap", map)); 
+0

由此您可以添加或更新環境中的屬性 – user6631150 2017-04-27 09:49:40

+0

你能否給你的答案增加一些解釋? – kaldoran 2017-04-27 09:55:49

+1

當我們從env(ConfigurableEnvironment)獲得propertySouces時。我們可以在新的地圖對象中附加多個屬性以及您想要添加或更新的數據。並傳遞給propertySources方法將允許你添加/更新你的新屬性。 – user6631150 2017-05-12 07:08:08