解決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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章