在PHP开发中,可以从服务器的环境变量确定应用程序是在生产环境还是开发环境中运行。
tomcat服务器上是否有类似的变量,或者是否有更好的方法将应用程序用于生产和开发?
答案 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这样的东西。当然,您正在使用某种工具来构建您的应用程序(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的不同属性文件,并为属性文件读取此变量。仅部署了必需的属性文件。