JAVA Quartz - 如果之前仍在运行则跳过作业并等待下一个计划时间

时间:2016-10-15 00:28:12

标签: quartz-scheduler

我有一个使用Quartz 2.2.3的Java解决方案,我所拥有的是:

  • 我的工作类已注释@DisallowConcurrentExecution以避免并发,因此同一工作每次只能运行一次(确定)
  • 这是一个CRON,每1小时运行一次(OK)
  • 时间是下午1点,作业开始运行(OK)
  • 现在时间是下午2点,之前的工作尚未结束(OK)
  • 由于该课程已注释,下一份工作将无法启动(信息很好 - 确定)
  • 现在时间是2小时:15分钟,第一份工作刚刚结束(OK)
  • 现在问题,因为第二份工作没有在下午2点开始,但现在第一份刚刚完成,第二份工作将开始。

这是我的问题,我不想让第二份工作等待,如果之前没有完成,我想跳过第二份工作,当时间转为3pm时,工作可以运行。阅读javadoc我添加了withMisfireHandlingInstructionDoNothing(),但它没有用。

我认为我做错了什么或遗失了什么。

我的代码:

Scheduler scheduler = StdSchedulerFactory.getDefaultScheduler();

JobDetail job = JobBuilder.newJob(TestCronService.class).withIdentity("testA","testB").build();


CronTrigger trigger = TriggerBuilder.newTrigger().withIdentity("testA","testB")
.withSchedule(CronScheduleBuilder.cronSchedule("0 0 * * * ?")
.withMisfireHandlingInstructionDoNothing())
.build();


scheduler.scheduleJob(job, trigger);
scheduler.start();

1 个答案:

答案 0 :(得分:4)

更改功能:

withMisfireHandlingInstructionDoNothing() 

withMisfireHandlingInstructionNextWithRemainingCount()