Quartz的JobDetail没有触发器指向时会被删除的问题

  之前项目里使用的是老版本的Quartz,才1.6.5。发现一个问题,如果我触发器配置的时间已经过了,想去手动触发一个任务,就会报找不到这个任务的异常,通过debug可以发现,Scheduler里添加jobDetail后,是有这个job的,但添加一个过期并指向这个jobDetail的Trigger后就会发现找不到这个job,没去看代码,但可以推断,肯定是添加触发器发现过期后,会做一个判断如果没有触发器指向一个job,那么就会删除这个job。本来我想改源代码的,但有怕部署的时候别人用网上下载的原始代码,还是不改得好。

  然后就下了最新版的2.2.1解决了这个问题,在用JobBuilder创建JobDetail的时候,有一个storeDurably()方法,可以在没有触发器指向任务的时候,将任务保存在队列中了。然后就能手动触发了。

  另外触发器的状态是个枚举Trigger.State,可以用来判断触发器是否暂停。

  如要要循环触发器启动的时候不开始任务,可以在 CronScheduleBuilder里调用withMisfireHandlingInstructionDoNothing()方法

posted @ 2014-04-16 15:14  寂静沙滩  阅读(3839)  评论(0编辑  收藏  举报