[英]Tomcat production / dev environments
在PHP開發中,可以從服務器的環境變量確定應用程序是在生產環境還是開發環境中運行。
tomcat服務器上是否有類似的變量可用,或者是否有更好的方法將應用程序用於生產和開發?
我們擁有的每個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;
}
默認情況下你不能這樣做。 在任何情況下,不要依賴容器來確定應用程序何時在環境X中。我會說你應該使用以下方法之一(按優先順序):
我鼓勵你使用像#1這樣的東西。 當然,您正在使用某種工具來構建您的應用程序(Ant,SBT等)。
想象一下,如果有人錯誤重新安裝Tomcat,刪除操作系統屬性或類似。 您的應用可能會以產品模式運行。
您可以在tomcat啟動腳本(例如linux環境中的run.sh)中設置OS環境變量,並從程序中讀取它們。 您還可以設置java環境變量(如下所示: 以與平台無關的方式將環境變量傳遞給JVM )。 我個人使用dev / prod / etc的不同屬性文件,並為屬性文件讀取此變量。 僅部署了必需的屬性文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.