如何在我的tomcat应用程序中实现特定于环境的init参数

时间:2013-08-26 16:53:52

标签: java spring-mvc tomcat7

我希望能够为我的java应用程序(tomcat7,spring-mvc)实现无配置部署。例如,现在我们正在考虑为我们部署到的每个环境(prod,stage,dev)创建一个context.xml文件:

context_prod.xml 
context_stage.xml 
context_dev.xml
context.xml (for localhost)

在我们的每台服务器上,我们都有一个符号链接context.xml,它指向适当的上下文文件(例如context_prod.xml)。因此,在部署时,我们不必担心更改数据库引用,密钥等。

我觉得这可能是更好的方法;也许是一个内置于春天的人?

2 个答案:

答案 0 :(得分:1)

Spring最近添加了处理环境配置的功能:

http://blog.springsource.com/2011/02/11/spring-framework-3-1-m1-released/

这对我来说似乎有点复杂,我已经完成了你在我自己的Spring MVC应用程序中为我们的日志记录所要求的内容。在我的DispatcherServlet配置中,我有这一行:

<context:property-placeholder location="classpath*:/system.properties"/>

<util:properties id="mySystemProperties" location="classpath:/logging/log4j-${system.runMode}.properties" />

system.runMode只是我们创建的一个env变量,在启动时在CATALINA.SH中设置如下:Setting environment variable TESSDATA_PREFIX in Tomcat

然后我使用Spring EL引用我想要的任何值,它适用于每个环境。正如您所看到的,我为日志记录执行了此操作,并且每个环境都有不同的日志记录配置文件。

答案 1 :(得分:1)

您可以使用Spring 3.1中引入的Spring @Profile。在您的情况下,您可以使用dev,stage,prod等配置文件。

此配置文件值可以在运行时初始化。因此,当您的应用程序启动时,Spring可以根据配置获取适当的配置文件。

您可以通过部署描述符(web.xml)等从环境变量设置配置文件。这个Spring源tutorial对您来说很有趣。

我个人使用Maven构建来在web.xml中的构建时替换配置文件值。在构建时,我将配置文件值作为构建参数传递。