我有一个应用程序,其中包含大约。 20个Java组件。 大约一半的组件是服务器,另一半是批处理程序。 几乎所有组件都直接与 oracle 数据库对话(jdbc 通过我们的一些基础设施代码 jar),其他几个组件与一些与数据库对话的服务器对话。 不管怎样,每个组件都配置了无数的 XML 配置文件。 这些变得几乎不可能维护。 一些配置特定于某个组件,其他配置类似(数据库 URL、连接器等)
更糟糕的是,该应用程序没有安装在许多环境中——实际上只有大约 10 个环境(qa、dev、production 等)。 但是拥有这些环境的人似乎无法正确维护配置。 特别是每当有升级时,总是会出现配置错误。 我什至开始将一些环境配置连同代码一起检入 SVN。 我曾经尝试过 xml 模式 validator (它包括在 .xsd 文件中定义有效的 XML,然后在违反模式规则但不起作用时抛出错误)
我想我在这里遗漏了一些基本的东西——也许有一个工具可以管理它,或者我应该将配置存储在数据库中。 该应用程序主要是由一位同事设计的,但我自己觉得它的可配置性太强了——事实上,许多配置实际上是指类——即可以选择处理程序和解析器等——XML 配置几乎看起来像代码。 非常感谢任何建议 彼得
最佳答案
用 XML 代替代码通常不是一个好主意;声明性的东西可能没问题,但程序性的东西可能不行。
如果所有配置都用 Java 代码定义,那么很多升级问题都会变成编译问题。编译器会为您挑选出它们,您可以更正它们。
所以你遇到了一个多部分问题。您需要将您的配置信息合理化为一组分区(每个组件、每个安装、全局)。您需要尽可能在编译时验证配置信息。并且您需要为加载的配置编写验证,以对其进行完整性检查。
在可能的范围内,将配置相对静态的东西转移到 Guice 中(至少,这是我喜欢的)。很多事情都以一种类型安全的方式发生。
考虑为应用程序的每个实例运行一个 WebDAV 服务器,并将配置存储到其中。每个人都可以点击一个简单的 URL 来提取配置文件的当前版本。
或者,建立一个像 BaseX 这样具有 REST 功能的轻量级 XML 数据库,然后在其中存储和加载您的配置信息。使用 JSLP 或类似的东西让您的组件找到中央配置存储库。
使用 XML DB 的另一个优势是您将能够通过查询所有配置文件集来进行大量完整性检查和更新。例如,如果给定的应用程序实例在每个配置文件中都应具有相同的 JDBC 参数,则一个简单的 xquery 将告诉您是否如此。
如果您没有能力修改拉取配置文件的应用程序(配置文件格式是固定的),那么请考虑为 XML 数据库编写一个查询 servlet,组装所需的配置信息,来自嵌套 block 或模板。这将使您能够找出配置文件之间的共同点,并动态生成这些 block 的参数化版本。
听起来这里的关键是进行渐进式改进。允许使用旧方法进行配置,但首先让配置加载查找中央配置源。
关于java - 多个 Java 服务器和批处理程序 - XML 配置噩梦,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6349109/