解決Quartz定時任務被觸發兩次的問題(附帶:Quartz的測試用例)

解決Quartz定時任務被觸發兩次的問題(附帶:Quartz的測試用例)

http://my.oschina.net/EugeneQiu/blog/265040?p=1

  解決Quartz定時任務被觸發兩次的問題(附帶:Quartz的測試用例)
  • 發佈時間: 2014/05/15 02:09 
  • 閱讀: 6956 
  • 收藏: 46 
  • 點贊: 1 
  • 評論: 16
摘要
解決quartz定時任務被觸發兩次的問題 方法1、通過改TOMCAT的配置文件server.xml配置 方法2、先把quartz配置信息提取出來,單獨存成一個文件,比如applicationContext-quartz.xml 然後修改web.xml,讓web容器啓動時,可以加載該文件 。(此文沒對此方法進行深入探究)

很多人在使用spring的Quartz配置定時任務時,會發現每次定時時間到達後,指定的定時方法同時執行了兩次。

(P.S. 本人項目用的Jfinal搭建,同樣出現該問題。)


 解決quartz定時任務被觸發兩次的問題:

其中<Host/>告訴tomcat,在啓動的時候加載webapps下的所有項目工程文件,<Context/>又讓tomcat再加載了一遍(一般情況下配置<Context/>,主要是由於想域名訪問時將工程名去掉的原因配置),這種情況下會導致工程中的quartz定時被兩次觸發,執行兩次。


  <Host/>裏面的改成 autoDeploy="false" deployOnStartup="false" 這樣就可以避免tomcat服務器中自啓動導致quartz定時任務被觸發兩次。(當然還可以按需求修改,畢竟每個項目的需求都不盡相同。)

    1. autodeploy屬性值設置爲false,如果此項設爲true,表示Tomcat服務處於運行狀態時,能夠監測appBase下的文件,如果有新有web應用加入進來,會自運發佈這個WEB應用,設成false就不會。

    2.增加deployOnStartup="false",表示Tomcat服務器啓動時, 不會自動發佈appBase目錄下所有的Web應用。

    這樣的話,在tomcat啓動時,不會自動發佈appBase下的應用,啓動後也不會自動發步appBase下的應用。

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="false" deployOnStartup="false">
	<Context path="" docBase="/eugeneqiu_test" debug="0" reloadable="true"/>
      </Host>

  

當然網絡上也有另外一種配置方法:

 就是在<Context/>裏面修改 docBase加上“/webapps”路徑,當然項目訪問路徑就變爲http://localhost/eugeneqiu_test 了,看見項目名實在是難受,我就沒用這方法了。

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
	<Context path="" docBase="/webapps/eugeneqiu_test" debug="0" reloadable="true"/>
      </Host>


解決quartz定時任務被觸發兩次的問題

方法1、通過改TOMCAT的配置文件server.xml配置

方法2、先把quartz配置信息提取出來,單獨存成一個文件,比如applicationContext-quartz.xml 然後修改web.xml,讓web容器啓動時,可以加載該文件 。(此文沒對此方法進行深入探究)



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章