解決Tomcat反覆載入Spring配置檔案
阿新 • • 發佈:2019-01-27
解決Tomcat重複載入Spring配置檔案
然後在Jsp/Servelet中,可以通過Servlet Context取得ApplicationContext:
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(application); 解決: 當然解決辦法有很多,主要是在server.xml配置上做手腳: 1、撤銷掉<Context>標籤,但是URL中需要加入專案web路徑
優點:不影響Eclipse的整合部署
注意:可能會引發問題,找不到manager和host-manager目錄,把這兩個目錄拷貝到新指向的目錄即可
3、新建目錄myapps平級於webapps,然後修改server.xml
當我們為自己的Web應用而改動Tomcat中conf/server.xml,可以不錄入專案路徑就可以訪問應用.
但是更改完畢後,啟動Tomcat會發現一種現象就是重複載入Spring配置檔案。
現象:
控制檯端會輸出日誌:
資訊: Initializing Spring root WebApplicationContext ....... 資訊: Initializing Spring root WebApplicationContext .......配置:
原server.xml配置
Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host>
改動後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後,壓進Servlet Context。
由ContextLoaderListener或ContextLoaderServlet,在Web應用啟動時完成。然後在Jsp/Servelet中,可以通過Servlet Context取得ApplicationContext:
ApplicationContext context = WebApplicationContextUtils.getWebApplicationContext(application); 解決: 當然解決辦法有很多,主要是在server.xml配置上做手腳: 1、撤銷掉<Context>標籤,但是URL中需要加入專案web路徑
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> </Host>2、在Tomcat下新建newWebapps,然後修改server.xml
<Host name="localhost" appBase="newWebapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> <Context path="" docBase="../webapps/frms4j" reloadable="true"/> </Host>
<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>