Spring整合Quartz定時任務執行2次,Spring定時任務執行2次
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
©Copyright 蕃薯耀 2017年4月21日
http://www.cnblogs.com/fanshuyao/
一、問題描述:
開發環境是Windows,測試環境是Linux,正式環境是Linux。
同樣的代碼,定時任務在在開發環境、測試環境中測試的定時任務只執行一次,而在正式環境執行2次。
各環境不同的是數據庫的連接,以及正式環境的域名配置。
二、解決方案:
由上面的問題分析,數據庫連接不同不會影響定時任務的執行,那就是域名配置的地方導致的。
域名的配置在Tomcat/conf/server.xml配置,在host節點加上了Context的加載項,如下:
- <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
- <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
- prefix="localhost_access_log." suffix=".txt"
- pattern="%h %l %u %t "%r" %s %b" />
- <Context path="" docBase="/home/java/tomcat7/webapps/finance" debug="0" reloadable="true"/>
- </Host>
為什么要加呢?
因為通過域名是只能映射到這台主機服務器,不能直接映射到文件夾,所以需要在Tomcat服務器的配置文件中做一個映射請求。
如上面所示:通過Context節點加了path和docBase兩個屬性,其中docBase是tomcat的Web項目的絕對路徑(也可以用相對路徑),而path則設置為空。把path設置為空,是希望通過域名訪問,不用添加web項目的文件夾名稱,直接就能訪問,如http://zrrz.xxx.com/,而不是http://zrrz.xxx.com/文件夾名,這樣就方便用戶通過域名訪問。有些人把path設置為斜杠(path="/")道理也是一樣的。
不過,正是因為加了context節點才導致定時任務執行了兩次。
最后的解決方案是:
把Host節點的appBase的值設置為空,如下:
- <Host name="localhost" appBase="" unpackWARs="true" autoDeploy="true">
原因是:Host節點會加載webapps文件夾下面的所有項目,而增加的context節點也會加載具體的項目,導致加載了兩次,也導致定時任務執行了兩次。對於把appBase設置為空后會不會出現其它問題,暫時不知,但現在確實解決了定時任務執行兩次的問題。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
©Copyright 蕃薯耀 2017年4月21日
http://www.cnblogs.com/fanshuyao/