【问题标题】:How to implement environment-specific init parameters in my tomcat application如何在我的 tomcat 应用程序中实现特定于环境的初始化参数
【发布时间】:2013-08-26 16:53:52
【问题描述】:

我希望能够为我的 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)。所以当我们部署时,我们不必担心更改数据库引用、键等。

我觉得可能有更好的方法来做到这一点;也许是内置于 spring 中的?

【问题讨论】:

  • 查看 Spring Profiles。

标签: java spring-mvc tomcat7


【解决方案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 只是我们创建的一个环境变量,并在启动时在 CATALINA.SH 中设置如下:Setting environment variable TESSDATA_PREFIX in Tomcat

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

【讨论】:

  • 我看到了关于 bean 的配置文件的潜力,但是 init 参数呢?我似乎无法将这些放在&lt;beans/&gt; 标签中。为了利用配置文件,我是否需要创建一个 java 类来存储配置参数?
  • 你能给我举个例子来说明你的初始化参数是什么意思吗?就这样我们在同一个页面上。
【解决方案2】:

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

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

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

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

【讨论】:

  • 该教程与我提供的链接相同。 :)
  • 您的解决方案没有使用 spring @Profile。它只是一个动态加载的 bean 配置文件。但它会解决问题
  • 我发布的第一个链接是使用@Profiles,然后代码的第二部分是在 Spring 中加载一个属性文件并让 Spring 使用这些属性来确定要加载的正确配置。
猜你喜欢
  • 2010-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多