2011-04-20 62 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服务等)都应该允许您跨应用程序同步属性。更细粒度(就分派个别更改而不是擦除和重新加载而言),您希望成为更复杂的解决方案