Tomcat生产/开发环境

ric*_*lla 10 java environment tomcat

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

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

Mat*_*ock 7

我们拥有的每个Tomcat实例都在文件isProductionGlobalNamingResources部分中定义了一个标志server.xml.

server.xml:

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

  <Service name="Catalina">
  ... etc ...
  </Service>
</Server>
Run Code Online (Sandbox Code Playgroud)

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

context.xml:

<?xml version="1.0" encoding="UTF-8"?>
<Context ...>
  <ResourceLink name="isProduction" global="isProduction" type="java.lang.Boolean" />
  ...
</Context>
Run Code Online (Sandbox Code Playgroud)

要获取值:

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;
}
Run Code Online (Sandbox Code Playgroud)


dbf*_*dbf 0

您可以在 tomcat 启动脚本(例如 Linux 环境中的 run.sh)中设置操作系统环境变量,并从程序中读取它们。您还可以设置 java 环境变量(如下所示:以与平台无关的方式将环境变量传递给 JVM)。我个人对 dev/prod/etc 使用不同的属性文件,并读取此变量作为属性文件。仅部署所需的属性文件。