Tomcat反覆載入Spring配置檔案
阿新 • • 發佈:2019-02-18
Tomcat有時候會重複載入配置檔案,這是由於server.xml配置不當造成的。
現象:
quartz定時執行了兩遍(其它配置檔案其實也載入了兩遍)
server.xml配置:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="frms4j" reloadable="true"/> </Host>
原理:
在Web環境裡,會使用ContextLoader構造ApplicationContext後,壓進ServletContext。
由ContextLoaderListener或ContextLoaderServlet,在Web應用啟動時完成。
出現上述問題的原因是tomcat載入玩appBase="webapps"之後又去載入docBase,因此造成載入兩次專案的問題。解決:當然解決辦法有很多,主要是在server.xml配置上做手腳:1、撤銷掉<Context>標籤,但是URL中需要加入專案web路徑<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host>
<Host name="localhost" appBase="newWebapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="../webapps/frms4j" reloadable="true"/> </Host>優點:不影響Eclipse的整合部署注意:可能會引發問題,找不到manager和host-manager目錄,把這兩個目錄拷貝到新指向的目錄即可
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="../myapps/frms4j" reloadable="true"/> </Host>4、在webapps目錄下新建目錄myapp,然後修改server.xml
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="/myapp/frms4j" reloadable="true"/> </Host>
類似問題:http://grokbase.com/t/tomcat/users/02cy9aaq8n/application-context-loaded-twice
參考:http://www.myexception.cn/web/665108.html