【问题标题】:Using JNDI for distributed configuration使用 JNDI 进行分布式配置
【发布时间】:2011-01-04 06:21:36
【问题描述】:

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

分布式

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

轻量级

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

支持回退

通常相同的配置适用于多个应用程序(例如,多个应用程序可能连接到同一个数据库)。另一方面,某些应用程序可能需要特定的配置。有时很难提前知道应用程序是否会使用“全局”配置或特定配置,因此能够首先搜索应用程序/主机特定配置然后回退会很好。我正在考虑这样的结构:

/global/host/application/instance 或 /global/application/host/instance:

所以,首先检查是否有任何特定于此主机上的应用程序实例的配置,然后检查是否有任何特定于此主机的此应用程序的配置,然后检查是否有任何特定的配置对于这个应用程序,然后尝试全局设置。这种事情有什么最佳做法吗?

实时配置更改

Spring 允许使用 jee:jndi-lookup 进行配置,您可以选择不缓存该值,这意味着每次请求都会查找该值。我不确定这对“字符串”类型的配置值是否有意义。它似乎也没有使用 NamingListener 方法来检测 DS 中的更改。如果能够更新 Directory Server 上的值并将该更改广播到所有使用它的应用程序,那就太好了。

其他注意事项

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

【问题讨论】:

  • 我开始认为 Apache Zookeeper 可能是要走的路。
  • 你最后做了什么?
  • 目前还没有。我仍然只是使用chef / ansible静态添加配置。候选对象包括 Zookeeper、etcd、doozer。

标签: java configuration distributed jndi


【解决方案1】:

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

【讨论】:

  • +1 Commons 配置实际上看起来很有趣...谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 2020-01-18
  • 1970-01-01
相关资源
最近更新 更多