之前項目里使用的是老版本的Quartz,才1.6.5。發現一個問題,如果我觸發器配置的時間已經過了,想去手動觸發一個任務,就會報找不到這個任務的異常,通過debug可以發現,Scheduler里添加jobDetail后,是有這個job的,但添加一個過期並指向這個jobDetail的Trigger后就會發現找不到這個job,沒去看代碼,但可以推斷,肯定是添加觸發器發現過期后,會做一個判斷如果沒有觸發器指向一個job,那么就會刪除這個job。本來我想改源代碼的,但有怕部署的時候別人用網上下載的原始代碼,還是不改得好。
然后就下了最新版的2.2.1解決了這個問題,在用JobBuilder創建JobDetail的時候,有一個storeDurably()方法,可以在沒有觸發器指向任務的時候,將任務保存在隊列中了。然后就能手動觸發了。
另外觸發器的狀態是個枚舉Trigger.State,可以用來判斷觸發器是否暫停。
如要要循環觸發器啟動的時候不開始任務,可以在 CronScheduleBuilder里調用withMisfireHandlingInstructionDoNothing()方法