介绍

在 Quartz 中,MisFire(错过触发)是指触发器错过了预定的触发时间,通常是由于系统延迟、任务执行时间过长或者调度器本身未能及时执行任务等原因。这种情况可能会导致任务无法按预期的时间执行。为了应对这些问题,Quartz 提供了 MisFire 补偿机制,即通过设置 MisFire Policy(错过触发策略)来处理这种情况。


       Trigger trigger= TriggerBuilder.newTrigger()
                .withIdentity(job.getJobName()+"_trigger") 

               .startAt(DateBuilder.todayAt(20,50,0)) //第一次执行时间
               .withSchedule(CronScheduleBuilder.cronSchedule("0 * * * * ?")//每分钟执行一次
                       .withMisfireHandlingInstructionIgnoreMisfires()) //补偿机制
                .build();

        scheduler.scheduleJob(jobDetail,trigger);

IgnoreMisfires全部补偿

withMisfireHandlingInstructionIgnoreMisfires会将超过的全部都补偿一遍,如我20:55:00启动项目,将会补偿5次。

  .startAt(DateBuilder.todayAt(20,50,0)) //第一次执行时间
       .withSchedule(CronScheduleBuilder.cronSchedule("0 * * * * ?")//每分钟执行一次
               .withMisfireHandlingInstructionIgnoreMisfires()) //补偿机制

DoNothing 不补偿

withMisfireHandlingInstructionDoNothing会将超过的不做补偿。

  .startAt(DateBuilder.todayAt(20,50,0)) //第一次执行时间
       .withSchedule(CronScheduleBuilder.cronSchedule("0 * * * * ?")//每分钟执行一次
               .withMisfireHandlingInstructionDoNothing()) //补偿机制

FireAndProceed 补偿一次(默认)

withMisfireHandlingInstructionFireAndProceed会将超过只补偿一次,如我20:55:00启动项目,将会补偿1次。

  .startAt(DateBuilder.todayAt(20,50,0)) //第一次执行时间
       .withSchedule(CronScheduleBuilder.cronSchedule("0 * * * * ?")//每分钟执行一次
               .withMisfireHandlingInstructionFireAndProceed()) //补偿机制
Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐