java - 仅在更改时加载属性文件

标签 java jndi

伙计们,我在 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)代码——可能需要更少的测试和更容易出错的代码。如果你在这里坚持这种方法,我认为你可以这样做:

  1. Properties 实例上使用包装器类。
  2. 这个包装类应该(在初始化时)从预定义的位置(可能是可配置的)加载属性文件
  3. 包装器,post init,应该启动一个将永远运行的线程并执行此操作:
    • 记录最近读取的属性文件的修改时间戳(见File类中的方法)
    • sleep 一段可配置的时间
    • 唤醒查看properties文件的修改时间戳
    • 如果时间戳不同 - 将属性文件重新加载到 Properties 实例中。请记住,这必须单独完成(即在没有人访问它时更改对象)。

HTH

关于java - 仅在更改时加载属性文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4162454/

相关文章:

java - 使用纯 Java 的 AuthenticationException LDAP

java - Rmi 客户端不使用代码库

java - 使用 Lombok 的类层次结构的 Common Builder 基实例

java - Jetty JNDI资源失败: "java.lang.ClassNotFoundException: oracle.jdbc.pool.OracleDataSource"

java - 使用 Simple-jndi (simple-jndi-0.18.2.jar) 调用 InitialContext() 时 Junit 测试失败

java - 数组中丢失的对象

queue - 在 JNDI 查找中找不到 JMS 队列

java - 使用 Guice 启动 @EJB 注入(inject)

java - Servlet 中的 JNDI 查找会导致 permgen 内存泄漏吗?

java - 日历方法