1. 程式人生 > >Spring專案載入在Tomcat啟動時載入了兩次

Spring專案載入在Tomcat啟動時載入了兩次

今天開發專案的時候,發現tomcat載入了兩次專案。
先交代一下開發環境:
eclipse
tomcat 7
首先排查了spring的配置檔案和web.xml檔案是否載入了兩次Spring的容器,但是並沒有發現問題。隨後感覺像是tomcat的問題。
隨後在網上找到了問題所在
問題原因 :
虛擬目錄引起的問題,我們在Host標籤裡配置了appBase=”webapps”,tomcat載入一次應用。這裡配置了一次docBase,tomcat又去載入一次應用。

<Host appBase="webapps" autoDeploy="true" name="localhost"
unpackWARs="true">
<!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" -->
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log." suffix=".txt"/> <Context docBase="backend" path="/cf-hrtop" reloadable="true" source="org.eclipse.jst.jee.server:backend"
/>
</Host>

解決辦法:
開發專案的時候難免就會出現專案名字和專案訪問的路徑不一樣的情況。
eclipse的修改方式是:

但是這樣修改的話eclipse會自動吧tomcat的server.xml改成上邊xml中的樣式。
如果用eclipse重新部署的話還會出現這個問題。但是如果每次自己手動改server.xml檔案的話有很麻煩。感覺像是eclipse的一個bug。
其實不然,eclipse的開發者應該早就想到這個問題了,在我們第一次配置tomcat的時候,eclipse給出的配置是這樣的
這裡寫圖片描述
預設的部署路徑並不是webapps而是wtpwebapps這個路徑,
而且eclipse在啟動tomcat的時候會指定一個引數
-Dwtp.deploy=D:\dev_workspace\webserver\tomcat\apache-tomcat-7.0.82-top-hr\wtpwebapps
上邊這個命令的意思就是將tomcat的部署路徑指定到wtpwebapp這個目錄下,也就是eclipse給tomcat的預設的部署路徑,這個就是eclipse的解決方式。

我還是更喜歡idea開發工具的解決方式,直接吧部署到webapps下的專案資料夾名字改掉了想要的專案訪問目錄的名字,這樣更簡單,更有效。