在PHP開發中,可以通過服務器環境變量來確定應用程序是否在生產環境或開發環境中運行。Tomcat生產/開發環境
在tomcat服務器上是否有類似的變量可用,還是有更好的方法來定位用於生產和開發的應用程序?
在PHP開發中,可以通過服務器環境變量來確定應用程序是否在生產環境或開發環境中運行。Tomcat生產/開發環境
在tomcat服務器上是否有類似的變量可用,還是有更好的方法來定位用於生產和開發的應用程序?
您可以在tomcat啓動腳本(例如linux環境下的run.sh)中設置OS環境變量,並從程序中讀取它們。你也可以設置Java環境變量(如:Passing environment variables to a JVM, in a platform-independent manner)。 我個人使用dev/prod/etc等不同的屬性文件,併爲屬性文件讀取此變量。只部署必需的屬性文件。
默認情況下你不能這樣做。 在任何情況下,不依賴容器來決定每當應用程序是在環境X.我說,你應該使用下列方法之一,它做的(按優先順序排列):
我鼓勵你使用類似#1。當然,您正在使用某種工具來構建您的應用程序(Ant,SBT等)。
想象一下,如果有人重新安裝Tomcat,請刪除操作系統屬性或類似內容。您的應用可能以prod模式運行。
我們有的每個Tomcat實例在server.xml
文件的GlobalNamingResources
部分都有一個isProduction
標誌。
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;
}