对于我的应用程序,我创建作业并使用CronTriggers安排它们。每个作业只有一个触发器,并且作业名称和触发器名称都相同。没有作业共享触发器。
现在,当我创建一个像这样的cron触发器“ 0/1 * * * *?”来指示作业每秒执行一次时,它就可以正常工作。
当我第一次通过致电暂停工作时出现问题:
scheduler.pauseJob(jobName, jobGroup);
然后再说50秒,然后使用:]恢复工作
scheduler.resumeJob(jobName, jobGroup);
我看到的是,在这50秒钟中,作业没有按要求执行。但是当我恢复工作的那一刻,我看到同时执行了50个工作!!!>
我以为这是由于失火指令的默认设置,但即使在创建触发器时将触发器的失火指令设置为此:
trigger.setMisfireInstruction(CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING);
发生同样的事情。谁能建议解决此问题的方法?
对于我的应用程序,我创建作业并使用CronTriggers安排它们。每个作业只有一个触发器,并且作业名称和触发器名称都相同。没有作业共享触发器。现在当我...
CronTrigger
通过记住nextFireTime
起作用。创建触发器后,将初始化nextFireTime
。每次触发作业nextFireTime
都会更新。由于暂停时未触发作业,因此nextFireTime
保持“旧”。因此,在恢复作业后,触发器将返回每个旧的触发器时间。
如果您暂停作业,触发器将继续触发,但是执行将排队直到作业恢复。这不是触发失败的触发器,因此该设置将无效。
至少从1.6.5版本开始(指尖的最早版本的石英),调度程序具有一个pauseTrigger方法,该方法将名称/组作为参数。这意味着您不必拥有所使用的每种触发器类型的子类,也不必进行时髦的删除/插入技巧。