Tomcat生产/开发环境

时间:2011-12-04 20:41:18

标签: java tomcat environment

在PHP开发中,可以从服务器的环境变量确定应用程序是在生产环境还是开发环境中运行。

tomcat服务器上是否有类似的变量,或者是否有更好的方法将应用程序用于生产和开发?

3 个答案:

答案 0 :(得分:7)

我们拥有的每个Tomcat实例都在isProduction文件的GlobalNamingResources部分中定义了server.xml标记。

server.xml

<Server ...>
  ...
  <GlobalNamingResources>
    <Environment name="isProduction" value="false" type="java.lang.Boolean" override="false" /> 
  </GlobalNamingResources>

  <Service name="Catalina">
  ... etc ...
  </Service>
</Server>

这允许通过在context.xml中创建引用资源的属性来在整个应用程序中使用该属性:

context.xml

<?xml version="1.0" encoding="UTF-8"?>
<Context ...>
  <ResourceLink name="isProduction" global="isProduction" type="java.lang.Boolean" />
  ...
</Context>

获取值:

public boolean isProduction() {
   Object o;
   try {
      o = (new InitialContext()).lookup("java:comp/env/isProduction");
   }  catch (NamingException e) {
      o = Boolean.FALSE; // assumes FALSE if the value isn't declared
   }
   return o == null ? Boolean.FALSE : (Boolean) o;
}

答案 1 :(得分:2)

默认情况下你不能这样做。 在任何情况下,不要依赖容器来确定应用程序何时在环境X中。我会说你应该使用以下方法之一(按优先顺序):

  1. 使用构建工具提供的任何内容。例如:使用maven配置文件。 http://maven.apache.org/guides/introduction/introduction-to-profiles.html
  2. 使用具有“mode”属性的应用的属性文件。
  3. 将-Dmyproject.mode = XXXX属性传递给JVM
  4. 使用OS系统属性
  5. 我鼓励你使用像#1这样的东西。当然,您正在使用某种工具来构建您的应用程序(Ant,SBT等)。

    想象一下,如果有人错误重新安装Tomcat,删除操作系统属性或类似内容。您的应用可能会以产品模式运行。

答案 2 :(得分:0)

您可以在tomcat启动脚本(例如linux环境中的run.sh)中设置OS环境变量,并从您的程序中读取它们。您还可以设置java环境变量(例如:Passing environment variables to a JVM, in a platform-independent manner)。 我个人使用dev / prod / etc的不同属性文件,并为属性文件读取此变量。仅部署了必需的属性文件。