1. 程式人生 > >【問題記錄】eclipse啟動web專案時,spring會初始化兩次

【問題記錄】eclipse啟動web專案時,spring會初始化兩次

背景:一個tomcat,一個eclipse,一個SSM框架的web專案。在eclipse中新建tomcat伺服器,預設配置,然後在伺服器配置中將Server Locations改成Use Tomcat installation並且將Deploy path換成tomcat安裝目錄下的webapps
這裡寫圖片描述

現象: 將web專案部署到背景中的tomcat伺服器中,執行專案。然後在eclipse的控制檯中就會發現spring配置被執行了兩次。如果想看到明顯的現象,可以在專案中新增一個自啟動的bean,並在自啟動方法中向控制檯列印資訊。那麼你將看到這些資訊被列印了兩次。也就是說,spring的bean被初始化兩次。

解決方法:
方式一:將伺服器配置中Deploy path路徑webapps換一個名稱,比如wtpwebapps
方式二:勾選Server Options中的Publish module contexts to separate XML files
這裡寫圖片描述

原因: web專案啟動時,由於

<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">

中的appBase中的值為webapps,tomcat載入到這裡的時候,會去webapps資料夾下查詢專案,並啟動找到的專案,然後tomcat發現了webapps下剛好有一個部署的專案(Deploy path設定什麼目錄,專案就會部署到什麼目錄),所以這是第一次啟動。接著,tomcat繼續載入配置,然後就找到了

<Context docBase="projectName" path="projectPath" reloadable="true" source="org.eclipse.jst.jee.server:ssm-config"/>

於是,tomcat根據這個配置又載入了一次專案,這是第二次載入專案,所以在控制檯可以看到兩次初始化spring。