好吧,我瀏覽了所有可以找到的內容,但沒有找到我的問題的答案。幾件物品很近但不夠近。我有一個Spring 3.0.7基於Web的應用程序在Tomcat中7.在applicationContext.xml中運行我有:Spring 3.0.7 CronTrigger在觸發時多次執行任務
<task:scheduler id="scheduledReportsScheduler" pool-size="1"/>
<task:scheduled-tasks scheduler="scheduledReportsScheduler">
<task:scheduled ref="scheduledReportsQueuer" method="process" cron="0 */1 * * * *"/>
</task:scheduled-tasks>
<bean id="scheduledReportsQueuer" class="com.foo.scheduledServices.ScheduledReportsQueuerService"></bean>
此執行我的ScheduledReportsQueuerService類每分鐘一次。這工作正常。那麼這個類裏面我查一些數據庫表和嘗試安排根據CronTrigger的任務,如果他們還沒有被安排:
if(!_workers.containsKey(schedule.getRptScheduleId())){
_logger.debug(Thread.currentThread().getName() + " Creating and scheduling ScheduledReportQueuerWorker for scheduled report ID: "+schedule.getRptScheduleId()+"("+schedule.getReportName()+") "+schedule.getCronPattern());
ScheduledReportQueuerWorker newWorker = new ScheduledReportQueuerWorker(schedule);
newWorker.setRptRequestDAO(getRptRequestDao());
newWorker.setRptScheduleDAO(getRptScheduleDao());
_workers.put(schedule.getRptScheduleId(), newWorker);
ScheduledFuture<?> newFuture = _scheduler.schedule(newWorker, new CronTrigger(schedule.getCronPattern()));
_futures.put(schedule.getRptScheduleId(), newFuture);
}
private ConcurrentTaskScheduler _scheduler;
這似乎也爲新的工作任務(newWorker以上)執行。問題是,他們在正確的觸發時間執行多次。例如,如果一個新任務具有'* */2 * * * *'的cron模式,它應該每2分鐘執行一次。相反,發生的事情是每2分鐘連續執行50-60次。
這使我堅持任何幫助,你可以給予很大。
更多信息這裏是一些日誌輸出,你可以看到基於XML的線程開始,它告訴我們我們正在創建一個線程,每兩分鐘運行一個報告。然後你會看到有兩分鐘報告連續運行60次。
// here it schedules a single report to be run every 2 minutes
2012-11-19 08:30:02,876 DEBUG - ScheduledReportsQueuerService - scheduledReportsScheduler-1 Creating and scheduling ScheduledReportQueuerWorker for scheduled report ID: 20182(Jasper Test Report 1) * */2 * * * *
// here the worker thread gets kicked off 57 times
2012-11-19 08:30:03,016 INFO - workers.ScheduledReportQueuerWorker - !!!!!!!!!!!!! 20182 (* */2 * * * *)
...
2012-11-19 08:30:59,012 INFO - workers.ScheduledReportQueuerWorker - !!!!!!!!!!!!! 20182 (* */2 * * * *)
// two minutes later the worker thread gets kicked off 60 times
2012-11-19 08:32:00,017 INFO - workers.ScheduledReportQueuerWorker - !!!!!!!!!!!!! 20182 (* */2 * * * *)
...
2012-11-19 08:32:59,003 INFO - workers.ScheduledReportQueuerWorker - !!!!!!!!!!!!! 20182 (* */2 * * * *)
// two minutes later the worker thread gets kicked off 60 times
2012-11-19 08:34:00,019 INFO - workers.ScheduledReportQueuerWorker - !!!!!!!!!!!!! 20182 (* */2 * * * *)
...
2012-11-19 08:34:59,014 INFO - workers.ScheduledReportQueuerWorker - !!!!!!!!!!!!! 20182 (* */2 * * * *)
// two minutes later the worker thread gets kicked off 60 times
2012-11-19 08:36:00,010 INFO - workers.ScheduledReportQueuerWorker - !!!!!!!!!!!!! 20182 (* */2 * * * *)
...
2012-11-19 08:36:59,006 INFO - workers.ScheduledReportQueuerWorker - !!!!!!!!!!!!! 20182 (* */2 * * * *)
你可以檢查彈簧上下文被加載了多少次?你還可以檢查任務每分鐘執行50次嗎? (或者是數量在增加?) –
正在處理它... – Scott
在上面添加了更多信息。我似乎無法弄清楚如何判斷上下文被加載了多少次。我試着添加一個ApplicationListener,但我從來沒有看到它的任何日誌輸出。 –
Scott