spring定時任務執行兩次 項目重復初始化 項目啟動兩次


 

tomcat/config/server.xml中Host標簽Context節點的問題

項目里quartz定時器總是被執行2次,通過打印發現原來項目被加載了兩次,所以項目下的Listener被重復加載了

server.xml是這樣的

appBase是指定虛擬主機的目錄,可以指定絕對目錄,也可以指定相對於的相對目錄.如果沒有此項,默認為/webapps。 

appBase的兩個作用:

1. 這個目錄下面的子目錄將自動被部署為應用。
2. 這個目錄下面的.war文件將被自動解壓縮並部署為應用

docBase是指定Web應用的文件路徑.可以給定絕對路徑,也可以給定相對於Host的appBase屬性的相對路徑. 如果Web應用采用開放目錄結構,那就指定Web應用的根目錄;如果Web應用是個WAR文件,那就指定WAR文件的路徑。

path是訪問docBase所在項目的訪問路徑,如果path為“”值,則瀏覽器地址欄輸入tomcat所在的IP:端口,就可訪問到docBase所在的項目。

 docBase是你文件夾的名字(也就是項目名),path是你的訪問路徑,appBase+path拼接來訪問

出現上述問題的原因是tomcat加載完appBase=”webapps”之后又去加載docBase(不清楚先加載哪個),因此造成加載兩次項目的問題。

解決方法一:將Host下的Context注釋掉。推薦這種方法

  

  網上的說法如下:

               

 

缺點是,IP端口后面需要加上項目名,才可以訪問到項目

解決方法二:appBase為空或者為隨意設置的一個空文件夾(可能需要新建該文件夾)

缺點是,如果部署的是war包,war包將不會被自動解壓。

解決方法三:appBase為空

 

缺點是,如果部署的是war包,war包將不會被自動解壓。

解決方法四:Context中的path不為空也不為“/”,path的值為“/”+項目名(不知道為什么這樣不會重復加載)

缺點和方法一一樣。

 

會出現重復加載的情況:

第一種:appBase=“webapps”,path=“”

第二種:appBase="webapps",path="/"

 

 

 綜上,推薦方法一,將Context部分注釋掉

 

 參考文獻:

http://blog.csdn.net/tuntun1120/article/details/64126278

http://blog.csdn.net/u012554102/article/details/50409452

http://www.iteye.com/problems/94122

http://nkliuliu.iteye.com/blog/816335


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM