伙计们,我在 jboss 类路径之外创建了一个属性文件
(我留在外面是因为我可以在运行时更改并且值会反射(reflect)出来)。
我每次都加载这个属性文件(比如 System.getProperty("jboss.base.dir.home")
)来做 rmi 查找。我认为每次加载同一个文件,尽管它不改变就是痛。
我想要一些想法,如何检测属性文件中的更改并仅在发生更改时加载。我想到了具有 lastmodified 的时间戳。请告诉我您的建议。
最佳答案
您可以重用 Apache commons 来读取属性文件: http://commons.apache.org/configuration/userguide/howto_filebased.html#Automatic_Reloading
或
您可以自己编程完成。这将重新实现 apache 公共(public)代码——可能需要更少的测试和更容易出错的代码。如果你在这里坚持这种方法,我认为你可以这样做:
- 在
Properties
实例上使用包装器类。 - 这个包装类应该(在初始化时)从预定义的位置(可能是可配置的)加载属性文件
- 包装器,post init,应该启动一个将永远运行的线程并执行此操作:
- 记录最近读取的属性文件的修改时间戳(见
File
类中的方法) - sleep 一段可配置的时间
- 唤醒查看properties文件的修改时间戳
- 如果时间戳不同 - 将属性文件重新加载到
Properties
实例中。请记住,这必须单独完成(即在没有人访问它时更改对象)。
- 记录最近读取的属性文件的修改时间戳(见
HTH
关于java - 仅在更改时加载属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4162454/