Java Webapp:关于.war的dev / prod构建捕获22

时间:2010-07-28 10:20:43

标签: java web-config web-applications

关于配置文件以及开发或生产环境,我有点无法获得。

如果你有一个 .war 并想在dev和prod中使用相同的 .war (因为dev环境的重点是,测试那个 .war 工作正常,因此您不想测试 .war ,然后部署另一个 .war 对!?),然后你在哪里把配置文件告诉你的环境是dev还是prod?

在本地说我有用户 / Users / Alex (在OS X上)测试 .war 然后,如果一切正常,我想部署在 / home / tomcat / 中的Linux机器。

我在哪里以及如何访问配置文件,告诉它是开发还是生产环境?

不要告诉我人们正在构建两个不同的 .war for dev和prod build!?这有点完全打败了目的......

3 个答案:

答案 0 :(得分:2)

这是一个常见问题,有几种解决方案。

大多数人(根据我的经验)似乎使用的是拥有生成.war文件的构建脚本。构建脚本可以是Ant或Maven,它并不重要 - 但Ant需要更多的工作来设置。

然后您拥有一个主属性文件(或类似的东西),其中包含您在所有不同环境中的数据库访问等所有属性。然后,当您运行构建脚本时,它只是在正确的位置设置属性,并且您拥有基本相同的.war文件 - 只为不同的环境配置。

Maven非常“开箱即用” - 看看profiles

答案 1 :(得分:1)

最好的方法是在.war之外构建特定于环境的配置。这样,您可以在不同的环境中使用单独的配置部署相同的战争。

可以通过多种方式进行配置:

  • 将配置放在$ CATALINA_HOME / lib或类似的地方,它将在应用服务器类路径中加载。

  • 将其放在执行应用程序的用户的主目录中,并将您的应用指向该位置。

  • 做一些JNDI魔术(通常这对我来说太难了,所以我要保持清醒)。

为了更加确定您的部署,您可以使用Capistrano之类的部署工具。通常开发人员会对prod配置进行一些预部署的完整性检查(显然还没有经过测试),以确保应用程序能够运行。

答案 2 :(得分:1)

您不希望重建WAR以从一个环境移动到另一个环境。

当然,您可以将配置外部化到数据库,但这对Spring没有多大帮助。

另一个想法是为每个环境设置一个配置文件,名称中嵌入了名称(例如,“config-devl.xml”,“config-test.xml”,“config-prod.xml”) 。为每个匹配后缀值的环境设置环境变量。让您的应用程序在启动时使用环境变量设置的后缀值读取配置文件。