跨Java系统的配置设计模式

dje*_*lin 6 java configuration design-patterns

问题是陈旧的问题 - 在我们的系统中支持配置文件或系统配置的正确设计是什么?我已经确定了以下要求:

  • 应该能够重新加载直播并立即获取更改而无需重新部署
  • 对于依赖于相同(例如SQL或memcached凭证)的软件应用程序,应该可以在隔离的位置引入更改并一次性部署,即使应用程序位于不同位置的不同计算机上也是如此
  • 支持运行相同应用程序的许多进程/机器

而这个设计的部分我正在努力:

  • 每个主要类应该将自己的"Config"类作为构造函数的输入参数吗?是否应该有一个工厂负责实例化正确的配置?或者每个类应该从自己的配置中读取并自动重新加载?
  • 如果B类派生自A类,或者围绕它编写,那么继承Config文件是否有意义?
  • 假设A类由M1和M2构成(M代表"main"),M1负责实例化资源.假设资源依赖于我希望在M1和M2之间通用的MySQL凭证,有没有办法避免中断所有权的权衡并放入A的配置v.在M1和M2的配置中复制资源?

这些是我现在正在处理的设计问题,并不真正了解这里有效的设计模式或框架.我是Java,所以任何解决这个问题的库都非常受欢迎.

Bri*_*new 7

您可以查看Apache Commons Config,它提供了广泛的功能.您可以指定多个配置源,并将它们排列为层次结构.特别感兴趣的一个特性是配置事件,允许您的组件注册他们对配置更改的兴趣.

动态更改配置的目标是诱人的,但需要对设计进行一些思考.您需要仔细管理这些更改(例如,如果缩小队列大小会发生什么 - 您是否丢弃队列中的现有元素?)