我有一個Web應用程序,它依賴於一些資源和參數在安裝後進行配置,如JDBC連接。如何在Tomcat中爲Web應用程序提供上下文配置?
我想到的是提供一個META-INF/context.xml
,當我部署應用程序時,它被Tomcat複製到[engine-name]/[server-name]/[app-name].xml
。這樣我所提供的是一個可以複製到appBase文件夾(webapps)的war文件。 Tomcat的文檔says如果有這樣一個文件,它不會被覆蓋,這是非常好的,因爲部署後所做的更改不會丟失。
但是這裏有一個微妙的問題: 由於我們通過複製到webapps目錄來部署應用程序,Tomcat將首先卸載現有的應用程序以及配置文件。這樣配置文件將丟失/覆蓋,這是不可取的。據我所知, Tomcat won't修改了此行爲。
問題是: 有沒有辦法通過以Tomcat不會刪除現有配置文件的方式安裝應用程序來解決此問題。 或者,有沒有更好的方式打包應用程序?
請注意,我們不希望將autoDeploy設置爲false,並且我們無法使用人爲干預進行安裝(這會排除使用Tomcat Manager Web應用程序的情況)。
如果我從.war文件中取出配置文件並單獨複製它作爲[engine-name]/[server-name]/[app-name].xml
,Tomcat仍然會將其與我的應用程序關聯,並在我複製新的.war文件後將其刪除。
另一個假設是:我們事先不知道配置的值。我們只會提供一個示例配置(如果您願意,可以使用佔位符),而實際配置將在稍後的某個時間執行(不一定在安裝時間內)。
感謝
你不能從war中移除你的context.xml文件並直接放在tomcat需要的地方?它不會被卸載並重新安裝。在碼頭上,這是熱部署的方式 – Snicolas
我試過,如果文件匹配[引擎]/[主機]/[應用] .xml模式,它被認爲是應用程序的一部分,即使它不是在.war文件(o_O)中。 – n0rm1e
您不能爲所有不同的環境提供構建腳本,以便在部署後不需要修改任何內容? – home