06 xxl-job的2种调度过期策略

827 阅读1分钟

一句话概括

对于已经超过5s以上时间的任务,会根据任务配置的调度过期策略来选择要不要执行,要么忽略要么立即执行,就这两种

配置任务的调度过期策略

有2种

1.忽略

2.立即执行一次

如何配置?

image.png

对应的枚举类

public enum MisfireStrategyEnum {  
  
    /**  
    * do nothing  啥都不做
    */  
    DO_NOTHING(I18nUtil.getString("misfire_strategy_do_nothing")),  

    /**  
    * fire once now  立即触发
    */  
    FIRE_ONCE_NOW(I18nUtil.getString("misfire_strategy_fire_once_now"));
}

在哪里使用到调度过期策略

image.png

对于已经超时5s还未执行的任务,才会根据任务配置的调度过期策略来选择要不要执行

底层源码

JobScheduleHelper.start()

if (nowTime > jobInfo.getTriggerNextTime() + PRE_READ_MS) {  
    // 距离该任务的触发时间已经超过5s了  

    // 获取该任务的调度过期策略
    MisfireStrategyEnum misfireStrategyEnum = MisfireStrategyEnum.match(jobInfo.getMisfireStrategy(), MisfireStrategyEnum.DO_NOTHING);  
    if (MisfireStrategyEnum.FIRE_ONCE_NOW == misfireStrategyEnum) { // 立即执行  
        // FIRE_ONCE_NOW 》 trigger 调度过期策略:立即执行(交给快慢线程池去trigger)  
        JobTriggerPoolHelper.trigger(jobInfo.getId(), TriggerTypeEnum.MISFIRE, -1, null, null, null);  
    } else {
      // 直接忽略
    }
    // 2、fresh next 更新其下次触发时间  
    refreshNextValidTime(jobInfo, new Date());  
  
}