Spring定時器在同一時間重復(fù)執(zhí)行兩次
Spring定時器在同一時間重復(fù)執(zhí)行兩次
解決方案如下:
最近用Spring的quartz定時器的時候,,發(fā)現(xiàn)到時間后,,任務(wù)總是重復(fù)執(zhí)行兩次,在tomcat或jboss下都如此,。
打印出他們的hashcode,,發(fā)現(xiàn)是不一樣的,也就是說,,在web容器啟動的時候,,重復(fù)啟了兩個quartz線程。
研究下來發(fā)現(xiàn)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容器啟動的時候只加載一次
|