2009-07-24 68 views
2

在運行時在jar/war文件中更改config.properties文件並熱部署更改? 我的需求如下,我們在jar/war文件中有一個「config.properties」,我必須通過網頁打開文件,在用戶對它進行了必要的更改後,我必須更新「config .properties「放在jar/war文件中,然後熱部署它。我們可以實現這一壯舉嗎?如果是的話,請你指點我的相關網站/文件,以便我可以開始這個。在運行時在jar/war文件中更改config.properties文件,並熱部署更改?

回答

1

你有一對夫婦的問題,把我的頭頂部:

  1. 確保沒有持有static引用到預先加載您config.properties文件java.util.Properties

  2. servlet引擎將解開你的戰爭到工作目錄,以便屬性文件加載不會是一個在戰爭中,這將是一個解壓。這意味着當您重新啓動servlet引擎時,您的更改 將被覆蓋,因爲這通常是戰爭解包的一個要點。

雖然這些問題並非不可逾越我總是發現它更容易通過存儲在JNDI屬性(如托爾比約恩建議)或數據庫(同時注意對靜態引用實現這樣的行爲我在第1點提到)。

JNDI /數據庫解決方案具有很好的緩解部署到多個環境的負面影響,因爲每個解決方案通常都有自己的註冊表/數據庫。

4

我強烈建議你的architecht重新考慮這個解決方案。您所描述的內容應該通過JNDI或類似技術完成,而不是通過重新加載屬性。

部署應該被認爲是靜態的 - 任何給定的網絡容器都不應該依賴於魔術,而且會在某一天(最可能是在最不方便的時間)中斷。

1

即使我同意上司的評價之前解釋的,我可以建議一個解決方案:

阿帕奇百科全書配置擴展給你posibility做這樣的事情:

config.setReloadingStrategy(new FileChangedReloadingStrategy()); 

這可能使招基於運行時更改配置文件,根本沒有代碼。

但是,像JNDI和其他Web應用程序配置方法一樣,安全性是一個問題。要小心你可以/必須能夠配置哪些參數。