1. 程式人生 > >解決Tomcat反覆載入Spring配置檔案

解決Tomcat反覆載入Spring配置檔案

解決Tomcat重複載入Spring配置檔案

當我們為自己的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>
優點:不影響Eclipse的整合部署 注意:可能會引發問題,找不到manager和host-manager目錄,把這兩個目錄拷貝到新指向的目錄即可 3、新建目錄myapps平級於webapps,然後修改server.xml  
<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>