关于配置文件以及开发或生产环境,我有点无法获得。
如果你有一个 .war 并想在dev和prod中使用相同的 .war (因为dev环境的重点是,测试那个 .war 工作正常,因此您不想测试 .war ,然后部署另一个 .war 对!?),然后你在哪里把配置文件告诉你的环境是dev还是prod?
在本地说我有用户 / Users / Alex (在OS X上)测试 .war 然后,如果一切正常,我想部署在 / home / tomcat / 中的Linux机器。
我在哪里以及如何访问配置文件,告诉它是开发还是生产环境?
不要告诉我人们正在构建两个不同的 .war for dev和prod build!?这有点完全打败了目的......
答案 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”) 。为每个匹配后缀值的环境设置环境变量。让您的应用程序在启动时使用环境变量设置的后缀值读取配置文件。