探寻用户自定义定时任务的实践方案(5)

2023-05-03 来源:飞速影视
{}", DateUtil.formatDate(DATE_INIT, "yyyy-MM-dd HH:mm:ss"), GsonUtil.toJson(t)); return; } if (DateUtils.addSeconds(nextDate, 30).before(now)) { shouldRun = true; } if (shouldRun) { TaskWork localWork = (TaskWork) ApplicationContextUtils.getReadyApplicationContext().getBean(t.getLocalScheduleDefine().getBeanName()); SpringTaskExecutor.getExecutorService().submit(() -> localWork.runJob(t)); } }); }}
上述流程较清晰的还原了任务调度的一些主要逻辑。从任务调度的部分代码中可以看出,整个调度过程异常被捕获,出现异常不会影响下一次的调度执行,任务的 misfire 问题处理策略是:
任务过了用户的设定时间不执行
任务未到用户的设定时间不执行
任务首次执行出了异常(以数据库执行记录为准),以当前时间为触发频率立刻触发一次执行,然后按照 Cron 频率依次执行(类似类似于 Quartz 的默认 withMisfireHandlingInstructionFireAndProceed 模式)
定时任务已有执行记录,以错过的第一个频率时间立刻开始执行,重做错过的所有频率周期后,重当下一次触发频率发生时间大于当前时间后,再按照正常的 Cron 频率依次执行(类似于 Quartz的withMisfireHandlingInstructionIgnoreMisfires 模式)
另外,需要考虑的是在同一个业务场景下,用户会创建多个任务定义,但它们执行的业务逻辑是一样的(执行策略,执行时间等不一样)。

探寻用户自定义定时任务的实践方案


相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

www.fs94.org-飞速影视 粤ICP备74369512号