我想收集一些關於將Web應用程序部署到正在運行的Tomcat的最佳實踐。不久前,我不得不描述我們的Web應用程序的部署過程,並且這個過程顯得相當混亂。我們有一個WAR文件(foo.war)中的應用程序正確配置,不需要額外的配置。在這種情況下,部署過程相當簡單:將Web應用程序部署到正在運行的Tomcat
- 將foo.war文件複製到$ CATALINA_HOME/webapps目錄。如果應用程序正確啓動,應用程序將自動部署到$ CATALINA_HOME/webapps/foo目錄。
要取消部署應用程序:
- 從$ CATALINA_HOME/webapps中刪除foo.war文件。如果應用程序卸載正確,它將被卸載,$ CATALINA_HOME/webapps/foo將被刪除。
現在我想重寫我正在運行的應用程序中的一些上下文參數。讀了docs,所有我需要做的:
- 創建一個名爲foo.xml
- 將文件複製到$ CATALINA_BASE/conf目錄/ [引擎]/[主機名] /目錄下的context.xml文件。
不幸的是,這沒有奏效:應用程序不會重新啓動。從經驗上講,我們發現唯一的解決方案是將war文件部署到$ CATALINA_HOME/webapps之外的位置。 此外,應該在web.xml中指定WAR文件中可配置上下文參數的缺省值,因爲WAR文件中的context.xml在外面有context.xml時不會被讀取。
這裏是foo.xml的一個簡單的例子:
<?xml version='1.0' encoding='utf-8'?>
<Context docBase="/path-to-deployment-directory/foo.war">
<Parameter name="myparam" value="newvalue" override="false"/>
</Context>
要確保,如果你想在「NEWVALUE」覆蓋在WAR的web.xml中指定的值,以指定倍率= false爲參數。這對我們來說並不明顯。
因此,到aplication部署到運行Tomcat:
- 創建一個名爲foo.xml
- 將文件複製到$ CATALINA_BASE/conf目錄/ [引擎]/[主機名context.xml文件]/ 目錄。
- 將foo.war複製到foo.xml的docBase中指定的位置;該應用程序將自動部署。
要申請新的環境參數:
- 添加參數值到foo.xml並保存文件;該應用程序將自動重新部署。
要取消部署應用程序:
- 從$ CATALINA_BASE/conf目錄/ [引擎]/[主機名] /目錄
請注意,移除foo的取出foo.xml。戰爭也會奏效,但也會刪除foo.xml。
到現在爲止,我有以下問題:
- 它是一個最佳實踐在所有不停止Tomcat的部署Web應用程序?我聽說一個意見,即部署到正在運行的tomcat從不需要,因爲人們在單獨的tomcat中運行每個應用程序。
- 將WAR文件複製到$ CATALINA_HOME/webapps還是將它們保存在一個單獨的位置最好?
- 如何配置部署到$ CATALINA_HOME/webapps的應用程序
- 爲什麼catalina.out中沒有INFO行來部署應用程序,並且有一個用於取消部署?它是可配置的嗎?