Java 使用JNDI进行分布式配置

Java 使用JNDI进行分布式配置,java,configuration,distributed,jndi,Java,Configuration,Distributed,Jndi,我们正在研究如何在主要基于Java的部署中进行分布式配置。我们有许多应用程序,集中配置应用程序是有意义的。JNDI似乎是标准的选择,可能会退回到ApacheDS之类的东西(这样我们也可以在其中存储非Java配置)。以下是我考虑过的一些事情。有人试过类似的东西吗?有什么建议吗 分布的 这将适用于多台机器上的多个应用程序,其中一些应用程序将是集群的。理想情况下,目录服务器也应该是集群的 轻量的 JNDI有一点J2EE的感觉。任何人都可以使用另一种分布式配置机制。应用程序本身往往是相对轻量级的,而不是

我们正在研究如何在主要基于Java的部署中进行分布式配置。我们有许多应用程序,集中配置应用程序是有意义的。JNDI似乎是标准的选择,可能会退回到ApacheDS之类的东西(这样我们也可以在其中存储非Java配置)。以下是我考虑过的一些事情。有人试过类似的东西吗?有什么建议吗

分布的 这将适用于多台机器上的多个应用程序,其中一些应用程序将是集群的。理想情况下,目录服务器也应该是集群的

轻量的 JNDI有一点J2EE的感觉。任何人都可以使用另一种分布式配置机制。应用程序本身往往是相对轻量级的,而不是完整的JavaEE应用程序(好吧,JavaEE是否仍然被认为是重量级的,需求是否一定是重量级的)

支持回退 通常,相同的配置适用于多个应用程序(例如,多个应用程序可能连接到同一数据库)。另一方面,某些应用程序可能需要特定的配置。有时很难预先知道应用程序是使用“全局”配置还是特定的配置,因此能够先搜索特定于应用程序/主机的配置,然后再回退就好了。我在想一个类似这样的结构:

/全局/主机/应用程序/实例或/全局/应用程序/主机/实例:

因此,首先检查此主机上是否存在特定于此应用程序实例的任何配置,然后检查此主机上是否存在特定于此应用程序的任何配置,然后检查是否存在特定于此应用程序的任何配置,然后尝试全局设置。这类事情有什么最佳实践吗

实时配置更改 Spring允许使用jee:jndi查找进行配置,您可以选择不缓存该值,这意味着每个请求都会查找该值。我不确定这对于“字符串”类型的配置值是否有意义。它似乎也没有使用NamingListener方法来检测DS中的更改。最好能够在目录服务器上更新一个值,并将该更改广播给所有使用它的应用程序

其他考虑
  • 管理不同的环境
  • 将配置添加到源代码管理,以便对其应用更改管理
  • 管理不同版本
  • 后退

您是否考虑过使用数据库存储应用程序配置?
Apache Commons有一个DatabaseConfiguration类,它将您的表作为java.util.Properties实例公开(请参阅)。

+1 Commons配置实际上看起来非常有趣。。。谢谢。我开始认为Apache Zookeeper可能是一个不错的选择。你最终得到了什么?还没有。我仍然只是使用chef/ansible静态地添加配置。候选人包括动物园管理员、etcd、杜泽。