歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Spring的Quartz定時器同一時刻重復執行二次的問題解決

Spring的Quartz定時器同一時刻重復執行二次的問題解決

日期:2017/3/1 10:07:48   编辑:Linux編程

最近用Spring的quartz定時器的時候,發現到時間後,任務總是重復執行兩次,在tomcat或jboss下都如此。
打印出他們的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配置如下:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/classes/applicationContext.xml,/WEB-INF/classes/applicationContext-timertask.xml</param-value>
</context-param>
<!-- 開啟監聽 -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>

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

這個問題在Spring的TimerTask定時器下也會出現,解決方法也是如此,希望對各位大俠有所幫助。

Copyright © Linux教程網 All Rights Reserved