相关推荐recommended
若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz)
作者:mmseoamin日期:2023-12-20

springboot整合Quartz

关于若依定时任务的使用可以去看视频默认定时任务的使用

关于springboot整合quartz的整合参考

(150条消息) 定时任务框架Quartz-(一)Quartz入门与Demo搭建_quarzt_是Guava不是瓜娃的博客-CSDN博客

(150条消息) SpringBoot整合Quartz_springboot quartz_桐花思雨的博客-CSDN博客

简单来说,启动一个定任务的流程就是这样四步

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第1张

若依当中的使用

不过若依当中为了实现一些自己的想要的功能写了非常多的逻辑。

需要读者有反射相关的知识。

这是若依的四步。

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第2张

目录结构

这是若依的定时任务模块,上面主要是有关这任务表sys_job和日志表sys_job_log一些crud,然后调用了untils包的关于定时任务的方法。主要的定时任务操作都是通过下面until包下的类实现的。

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第3张 若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第4张

对应数据库中的表

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第5张

比如新增任务的时候,就往sysjob表新增一条数据,然后启动定时任务

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第6张

因此我们的重点是分析untils下的包

untils包

我们先看看这几个类的关系

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第7张

因此我们从最上层的ScheduleUtils类开始看,主要分析这个方法createScheduleJob()

还记得最上面讲的创建任务的四个步骤么?

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第2张
第一步Class jobClass = getQuartzJobClass(job);

刚刚我们在上面图关系的知道若依定义了两个类继承AbstractQuartzJob类 implements Job接口,两个类唯一的区别就是加了@DisallowConcurrentExecution注解不允许并发执行,两者都调用了jobInvokeUtil类的.invokeMethod(sysJob)方法,

因此若依的详细定时任务逻辑都在JobInvokeUtil.invokeMethod(sysJob);里面

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第9张 若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第10张

是否并发对应前端这里

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第11张

(全文重点)JobInvokeUtil.invokeMethod(sysJob);
  1. 第一部分获取了调用方的相关参数

  1. 第二部分判断调用形式(若依支持两种调用,bean调用和全类名调用,可看下图)

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第12张

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第13张
  1. invokeMethod方法这里通过反射进行获取调用方法的参数和名称,然后进行调用

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第14张
  1. 现在我们知道我们执行了传入的这个方法,那么这个方法的在哪呢?其实在task包下。所以我们如果想在若依里面实现自己的定时任务,直接在这个包下面写要处理的逻辑就行啦,但是有一点要注意的是若依设置了个白名单,因此这些自定义的定时任务逻辑要卸载con.ruoyi包下。

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第15张 若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第16张

设置了白名单

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第17张

第二步构建JobDetail
若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第18张

这里的jobId和jobGroup对应的是

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第19张

第三步构建trigger
若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第20张

前面两行代码对应的就是这两个

若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第21张
第四步把任务给调度器
若依学习——定时任务代码逻辑 详细梳理(springboot整合Quartz),第22张