我们构建 3 层企业解决方案,通常由多个 webapp 和 ejbjar 模块组成,它们都与数据库对话并具有多个外部集成点。
每个模块通常都需要自己的配置,这些配置可以在解决方案的生命周期内发生变化。 部署它变成了一场噩梦,因为现在我们有 18 个属性文件,必须记住要复制和配置这些文件,还要设置数据源、队列、内存要求等。
我对有更好的方法充满希望,但并不乐观。 我们考虑过/使用过的一些选项,每个选项都各有利弊:
- 使用多个 maven 项目和持续集成(例如 hudson 或 jenkins)构建一个配置 jar,其中包含每个环境(dev、qa、prod)的所有属性文件,然后将所有内容捆绑为一个 EAR。但是,在需要时无法在生产中轻易更改。
- 将大部分设置放在数据库中,并有一个简单的屏幕来修改它。在内部,我们可以有一个通用的配置服务 EJB,它可以读取和修改值。每个模块都可以有一个自定义扩展版本,其中包含特定的 getter 和 setter。
- 对所有属性文件进行版本控制,然后在生产中 check out 并在进行更改后将其检入生产分支。
有了所有这些,您仍然需要以特定于容器的方式配置数据源和队列等:(
最佳答案
- 考虑将自定义配置对象绑定(bind)到
JNDI
。然后在您的应用程序中查找此对象以配置它们。好处 - 您可以使用自定义配置对象,而不是相当通用的Map
或Properties
。 - 另一种方法是使用
JMX
来配置您需要的应用程序。好处 - 您可以将需要配置的对象直接绑定(bind)到MBean Server
,然后使用诸如jconsole
或visualvm
之类的知名工具进行配置您的应用程序的组件。
这两种方式都支持在运行时动态重新配置您的应用程序。我更喜欢使用 JMX
。
关于JavaEE 解决方案配置最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8164502/