我有一个运行在tomcat上的应用程序,它有一堆配置文件,它们在运行的每个环境(开发,测试和生产)都不同。但是并不是每个配置文件中的每一行在环境中都会有所不同,因此总会有重复的信息,如果某些信息发生更改,则不会更新。在java中处理环境特定配置的最佳方式是什么?
是否有一个很好的框架/库,将单独的文件合并为一个特定于环境的块?或者处理这个问题的其他方式?
我有一个运行在tomcat上的应用程序,它有一堆配置文件,它们在运行的每个环境(开发,测试和生产)都不同。但是并不是每个配置文件中的每一行在环境中都会有所不同,因此总会有重复的信息,如果某些信息发生更改,则不会更新。在java中处理环境特定配置的最佳方式是什么?
是否有一个很好的框架/库,将单独的文件合并为一个特定于环境的块?或者处理这个问题的其他方式?
属性文件是我一直使用的。它可以手工编辑,也可以在软件中编辑,Properties对象可以自己读入并写入文件系统。这里的javadoc的页面:
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Properties.html
的重复是不是一个真正的问题,具有中央配置文件中的其他文件“扩展”可能casue更头疼的长远。
我的建议是使用ant将适当的文件加载(复制和移动)到适当位置,然后启动应用程序(打包进入战争?)。每个环境只需要一个不同的任务。因此,您将有三个配置文件(dev.config,test.config和production.config),它们将被移动并覆盖/ WEB-INF文件夹中的配置,具体取决于您正在运行的任务。
沿着同一条线你可以有一个sinlge构建任务,它需要配置文件名的必要参数。如果缺少构建将失败。 – shsteimer 2008-10-14 13:12:38
如果您使用maven,您可以使用它的资源过滤功能以及配置文件为您部署到的每个环境生成属性文件。
作为一个额外的好处,maven也可以为你部署你的web应用程序。
如果你想避免混乱,我会建议单独的环境参数配置文件。然后你将有一个更多的配置文件来管理。这是配置文件的数量与每个配置文件的复杂度之间的折衷。
我喜欢将特定于环境的值放入server.xml中,并在各个webapps的yourapp.xml文件中使用资源链接。 – 2008-10-14 05:59:59