2011-12-04 289 views
9

在PHP開發中,可以通過服務器環境變量來確定應用程序是否在生產環境或開發環境中運行。Tomcat生產/開發環境

在tomcat服務器上是否有類似的變量可用,還是有更好的方法來定位用於生產和開發的應用程序?

回答

2

默認情況下你不能這樣做。 在任何情況下,不依賴容器來決定每當應用程序是在環境X.我說,你應該使用下列方法之一,它做的(按優先順序排列):

  1. 使用任何你的構建工具提供。例如:使用maven配置文件。 http://maven.apache.org/guides/introduction/introduction-to-profiles.html
  2. 使用具有「模式」屬性的應用程序的屬性文件。
  3. 傳遞一個-Dmyproject.mode = XXXX屬性爲JVM
  4. 使用的OS系統屬性

我鼓勵你使用類似#1。當然,您正在使用某種工具來構建您的應用程序(Ant,SBT等)。

想象一下,如果有人重新安裝Tomcat,請刪除操作系統屬性或類似內容。您的應用可能以prod模式運行。

6

我們有的每個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; 
}