1. 程式人生 > >Spring定時器在同一時間重複執行兩次

Spring定時器在同一時間重複執行兩次

轉自: http://blog.sina.com.cn/s/blog_4c03369c0101tbtj.html

最近用Springquartz定時器的時候,發現到時間後,任務總是重複執行兩次,在tomcatjboss下都如此。打印出他們的hashcode,發現是不一樣的,也就是說,在web容器啟動的時候,重複啟了兩個quartz執行緒。研究下來發現quartz確實會載入兩次:第一次:web容器啟動的時候,讀取applicationContext.xml檔案時,會載入一次。第二次:Spring本身會載入applicationContext.xml一次。而我的quartz配置就是寫在applicationContext.xml

檔案裡的。解決辦法很簡單先把quartz配置資訊提取出來,單獨存成一個檔案,比如applicationContext-quartz.xml 
然後修改web.xml,讓web容器啟動時,可以載入該檔案這樣quartz只會在web容器啟動時載入一次,Spring不會再載入了。

web.xml配置如下:

 
    contextConfigLocation
    /WEB-INF/classes/applicationContext.xml,/WEB-INF/classes/applicationContext-timertask.xml
 
  
 
      
           org.springframework.web.context.ContextLoaderListener
      
  

把定時器的配置單獨寫成一個配置檔案,在web容器啟動的時候只加載一次