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

2023-05-03 来源:飞速影视

任务调度


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


调度任务的部分逻辑:
public class SpringTaskMonitor implements Runnable { private static Date DATE_INIT = new Date(); @Override public void run() { ExceptionUtils.doActionLogE(this::doRun); } private void doRun() throws Throwable { val taskScheduleDefineMapper = ApplicationContextUtils.getReadyApplicationContext().getBean(TaskScheduleDefineMapper.class); val taskScheduleRecordMapper = ApplicationContextUtils.getReadyApplicationContext().getBean(TaskScheduleRecordMapper.class); TaskDefinitions.getTaskMap().values().forEach(t -> { //1.无效任务 if (!t.getLocalScheduleDefine().getValid()) { return; } //2.设置了过期时间 Date now = new Date(); if (!t.getLocalScheduleDefine().getIsPermanent()) { Date endTime = t.getLocalScheduleDefine().getEndTime(); if (null == endTime || endTime.before(now)) { TaskDefinitions.getTaskMap().remove(t.getLocalScheduleDefine().getBeanName() t.getLocalScheduleDefine().getBusId()); taskScheduleDefineMapper.updateTaskValid(t.getLocalScheduleDefine().getId(), false); return; } } val lastRecord = taskScheduleRecordMapper.getLast(t.getLocalScheduleDefine().getId()); Date date = lastRecord == null ? DATE_INIT : lastRecord.getExecuteDate(); boolean shouldRun = false; Date nextDate = t.cronGenerator().next(date); //首次执行且执行时间未到重置开始时间 if (null != t.getLocalScheduleDefine().getStartTime() && nextDate.before(t.getLocalScheduleDefine().getStartTime())) { DATE_INIT = new Date(); log.warn("任务执行时间未到设置的开始时间,重新设置系统时间{},本次任务忽略:
相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

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