特定于环境的配置文件 - 最佳实践?

时间:2011-03-08 13:17:02

标签: java deployment configuration java-ee

我的应用程序配置文件有很多特定于环境的设置。此外,我还有一些可以部署该应用程序的环境。

使配置环境特定的最佳做法是什么?

目前我正在将配置文件所在的目录添加到JVM类路径中。这样,应用程序只需从类路径加载配置文件,并使用它在那里找到的内容。

然而,最近我被告知这是一种不好的做法,我应该考虑将JNDI用于此目的。

那么,您可以建议在我的情况下尽可能轻松地部署和开发流程吗?

提前致谢。

5 个答案:

答案 0 :(得分:1)

您可以在项目根目录下的不同文件夹中为每个环境设置和维护特定的配置文件集。然后,您可以使用参数扩展构建过程,以确定要构建的环境,以便它可以将所需的配置文件复制到要部署的包中。然后,部署的应用程序将配置文件始终放在同一位置,并且它只有一组一致的文件,从而最大限度地减少了出错的可能性。

此方法的缺点是您的配置集之间可能存在大量重复。这可以通过生成具体配置文件作为构建过程的一部分来解决。将所有变量配置参数提取到不同的配置属性文件中,每个环境一个,并创建模板配置文件集,如果每个适用位置都有真实参数,则包含占位符名称。然后,您需要的只是构建中的预处理器,它从镜像中创建一组配置文件,用相应的具体值替换占位符。 (例如,Maven内置支持属性配置文件,也用于在构建时生成资源。)

答案 1 :(得分:1)

您可以允许用户指定配置文件/目录,其中包含以下任何一个内容:(1)命令行参数; (2)Java系统属性;或(3)环境变量。

请注意,您可以通过调用FOO_CONFIG来访问System.getenv("FOO_CONFIG")环境变量。 Sun“弃用”(故意破坏的委婉说法)Java 1.0.1和Java 1.4.x之间的这种操作包括在内。但是,此操作在Java 5中未被完善(即已修复)。

答案 2 :(得分:1)

我们有类似的要求。这就是我们实施它的方式。

我们有shared-app.war个文件在不同的部门共享。此.war文件中的代码查找(或读取)shared-app-cfg.properties文件。每个部门的属性文件都不同。

.war文件的清单中,我们说它取决于shared-app-cfg.jar .war期望shared-app-cfg.jar在运行时环境中可用 此.jar文件的内容为shared-app-cfg.properties

每个部门都必须构建包含属性文件的jar文件 根据每个部门构建应用程序的方式,他们可以:

  1. shared-app-cfg.jar文件包shared-app.war打包在.ear文件中。

  2. 或者,将.jar文件放入shared-lib 不确定这是否是优雅的解决方案......但它解决了这个问题。

答案 3 :(得分:0)

恕我直言,如果您有很多特定于环境的信息,那么您最好使用配置文件,如果您只有几个字符串,那么您可以使用jndi环境字符串。

答案 4 :(得分:0)

另一个猜测(等待评论) - 将“/ configs”字符串放入JNDI并让应用程序从那里加载配置是一种好习惯吗?看起来比将它添加到类路径更好,并且仍然很好地实现了它的目的。你觉得怎么样?