Spring整合Quartz定時任務執行2次,Spring定時任務執行2次


Spring整合Quartz定時任務執行2次,Spring定時任務執行2次

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

©Copyright 蕃薯耀 2017年4月21日

http://www.cnblogs.com/fanshuyao/

 

一、問題描述:

開發環境是Windows,測試環境是Linux,正式環境是Linux。

同樣的代碼,定時任務在在開發環境、測試環境中測試的定時任務只執行一次,而在正式環境執行2次。

 

各環境不同的是數據庫的連接,以及正式環境的域名配置。

 

二、解決方案:

由上面的問題分析,數據庫連接不同不會影響定時任務的執行,那就是域名配置的地方導致的。

域名的配置在Tomcat/conf/server.xml配置,在host節點加上了Context的加載項,如下:

 

Xml代碼   收藏代碼
  1. <Host name="localhost"  appBase="webapps"  unpackWARs="true" autoDeploy="true">  
  2.         <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"  
  3.                prefix="localhost_access_log." suffix=".txt"  
  4.                pattern="%h %l %u %t &quot;%r&quot; %s %b" />  
  5.     <Context path="" docBase="/home/java/tomcat7/webapps/finance" debug="0" reloadable="true"/>  
  6. </Host>  

 

為什么要加呢?

因為通過域名是只能映射到這台主機服務器,不能直接映射到文件夾,所以需要在Tomcat服務器的配置文件中做一個映射請求。

 

如上面所示:通過Context節點加了path和docBase兩個屬性,其中docBase是tomcat的Web項目的絕對路徑(也可以用相對路徑),而path則設置為空。把path設置為空,是希望通過域名訪問,不用添加web項目的文件夾名稱,直接就能訪問,如http://zrrz.xxx.com/,而不是http://zrrz.xxx.com/文件夾名,這樣就方便用戶通過域名訪問。有些人把path設置為斜杠(path="/")道理也是一樣的。

 

不過,正是因為加了context節點才導致定時任務執行了兩次。

 

最后的解決方案是:

把Host節點的appBase的值設置為空,如下:

Xml代碼   收藏代碼
  1. <Host name="localhost"  appBase=""  unpackWARs="true" autoDeploy="true">  

原因是:Host節點會加載webapps文件夾下面的所有項目,而增加的context節點也會加載具體的項目,導致加載了兩次,也導致定時任務執行了兩次。對於把appBase設置為空后會不會出現其它問題,暫時不知,但現在確實解決了定時任務執行兩次的問題。

 

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

©Copyright 蕃薯耀 2017年4月21日

http://www.cnblogs.com/fanshuyao/


免責聲明!

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



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