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

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

任务执行


任务调度提交的任务给线程池处理,执行前后根据任务定义对任务做一些通用处理(黄色框部分),具体的执行业务逻辑交给接口 LocalWork 实现类的 execute() 方法处理。

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


/** * description: 辅助来完成默认的localWork方法 */public class TaskWorkUtils { static void helpRun(TaskWork localWork, ScheduleTask scheduleTask) { //部分伪代码如下 } }//是否任务有执行过boolean executed = false;TaskScheduleRecord record = null;Date executeDate = new Date();try { //根据需要决定是否获取锁后执行(redisLock,zkLock,dbLock都可以,保证任务唯一执行) String lockName = localWork.getClass().getSimpleName() scheduleTask.getLocalScheduleDefine().getBusId(); //获取不到锁return //获取到执行下面逻辑 record = ExceptionUtils.doFunLogE(() -> { TaskScheduleRecord newRecord = buildRecord(scheduleTask, executeDate); newRecord.setId(taskRecordService.save(newRecord)); return newRecord; }); //如果不能保存成功,表示出现了数据库异常,相应状态不能存取,则直接返回,不再执行 if (record == null) { return; } executed = true; localWork.execute(record);} catch (Throwable throwable) { log.error("执行任务时出现异常信息:{}", throwable.getMessage(), throwable); e = throwable;} finally { //释放锁:
相关影视
合作伙伴
本站仅为学习交流之用,所有视频和图片均来自互联网收集而来,版权归原创者所有,本网站只提供web页面服务,并不提供资源存储,也不参与录制、上传
若本站收录的节目无意侵犯了贵司版权,请发邮件(我们会在3个工作日内删除侵权内容,谢谢。)

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