2011-04-20 42 views
0

我正在運行多個API,這些API從文本文件加載默認屬性。
但是,如果1個API更改屬性值,我希望所有API都能夠讀取新值。
我嘗試使用System.setProperty(「prop_name」,)但這不會更改到其他API。
我不想修改原始文本文件。同時也希望避免增加編寫新屬性文件的開銷並使所有API加載此文件(有許多API和許多屬性,並且不希望每個屬性更改都發生這種情況)。
如何更改java中的持久屬性

我該怎麼做?

+4

我認爲您需要查看「API」這個詞的含義 – 2011-04-20 22:13:53

+0

庫是如何實際加載屬性?每個庫是直接從文件中讀取,還是在單個位置讀取文件,並且庫接收到一個Properties對象? – 2011-04-20 22:14:53

+0

直接從文件 – Andy 2011-04-20 22:16:42

回答

1

您需要更改庫以採取共享Properties對象或使用System.getProperties()。如果每個庫打開一個文件不Properties.load(...)直接,那麼你的選擇是有限的:

  • 修改屬性文件
  • 使用自定義類加載器來修改庫的字節碼,因爲它們被加載到呼叫攔截Properties.load(...)
  • 修改在JDK源Properties類(包括在此名單的完整性只)
+0

。我不想更改原始屬性文件。這是因爲所有的程序都應該以默認值開始。只有在運行期間,如果值發生變化,那麼應該使用新值。 – Andy 2011-04-20 22:39:38

0
  1. 您合作uld爲每個JVM生成一個收割者線程,該線程輪詢目錄中的文件以查找更改並應用它們,因爲它們適用於該JVM。

  2. 您可以使用套接字API將所有應用程序連接到服務器應用程序。服務器可以管理屬性,客戶端可以定期輪詢更改。

基本上你正在做的是促進進程間通信。因此,任何標準的方法(文件,管道,套接字,Web服務等)都應該允許您跨應用程序同步屬性。更細粒度(就分派個別更改而不是擦除和重新加載而言),您希望成爲更復雜的解決方案