今天,項目組一個同事說開發環境一直正常quartz定時任務今天不跑了,因為異常已經封裝了,所以應該不是沒有捕獲異常導致。也檢查了JobDetail肯定沒有重復的任務,最后檢查qrtz_triggers表的時候,發現TRIGGER_STATE為ERROR了,照理應該是PAUSED或者WAITING,網上搜了下,應該不是版本的問題,而是多個開發本地環境的定時任務配置不一致所致。通知其他開發將配置文件quartz.autoStartup從true改為false,並人工重置了定時任務為PAUSED后,恢復正常。TRIGGER_STATE的狀態包括如下:
WAITING:等待
PAUSED:暫停
ACQUIRED:正常執行
BLOCKED:阻塞
ERROR:錯誤
建議:
使用quartz配置定時任務,多台服務器使用同一數據庫進行開發時,保證數據庫qrtz_scheduler_state(任務調度表)中只有一條數據,這樣就能保證定時任務是自己的應用服務取走執行的。
集成quartz到項目的完整方案參見http://www.cnblogs.com/zhjh256/p/5500217.html。
