springboot整合Quartz
关于若依定时任务的使用可以去看视频默认定时任务的使用
关于springboot整合quartz的整合参考
(150条消息) 定时任务框架Quartz-(一)Quartz入门与Demo搭建_quarzt_是Guava不是瓜娃的博客-CSDN博客
(150条消息) SpringBoot整合Quartz_springboot quartz_桐花思雨的博客-CSDN博客
简单来说,启动一个定任务的流程就是这样四步
![](/wp-content/uploads/2023/10/frc-e3a160106c04a6c5d1a6730f50efd502.png)
若依当中的使用
不过若依当中为了实现一些自己的想要的功能写了非常多的逻辑。
需要读者有反射相关的知识。
这是若依的四步。
![](/wp-content/uploads/2023/10/frc-6e019c5b83a854f08699750d20cea1de.png)
目录结构
这是若依的定时任务模块,上面主要是有关这任务表sys_job和日志表sys_job_log一些crud,然后调用了untils包的关于定时任务的方法。主要的定时任务操作都是通过下面until包下的类实现的。
![](/wp-content/uploads/2023/10/frc-4ee0b8ec1429bfb3eecbf47483f9f2b3.png)
![](/wp-content/uploads/2023/10/frc-f9343bcc4d471f274066fac653337057.png)
对应数据库中的表
![](/wp-content/uploads/2023/10/frc-b46c0fbd3ce13356d9078ba049b903e7.png)
比如新增任务的时候,就往sysjob表新增一条数据,然后启动定时任务
![](/wp-content/uploads/2023/10/frc-1f994ae6b37cf486e945d5ffa6a6eed3.png)
因此我们的重点是分析untils下的包
untils包
我们先看看这几个类的关系
![](/wp-content/uploads/2023/10/frc-4db0a6ac88fc1467675b39f16d280833.png)
因此我们从最上层的ScheduleUtils类开始看,主要分析这个方法createScheduleJob()
还记得最上面讲的创建任务的四个步骤么?
![](/wp-content/uploads/2023/10/frc-6e019c5b83a854f08699750d20cea1de.png)
第一步Class extends Job> jobClass = getQuartzJobClass(job);
刚刚我们在上面图关系的知道若依定义了两个类继承AbstractQuartzJob类 implements Job接口,两个类唯一的区别就是加了@DisallowConcurrentExecution注解不允许并发执行,两者都调用了jobInvokeUtil类的.invokeMethod(sysJob)方法,
因此若依的详细定时任务逻辑都在JobInvokeUtil.invokeMethod(sysJob);里面
![](/wp-content/uploads/2023/10/frc-3e093faee709dc3daab38dbd0fc81f85.png)
![](/wp-content/uploads/2023/10/frc-be6449533f83aa7dbfd5e2e6ac6f431e.png)
是否并发对应前端这里
![](/wp-content/uploads/2023/10/frc-c0bfdb5632f93f1b176879fa5e760a3e.png)
(全文重点)JobInvokeUtil.invokeMethod(sysJob);
-
第一部分获取了调用方的相关参数
-
第二部分判断调用形式(若依支持两种调用,bean调用和全类名调用,可看下图)
![](/wp-content/uploads/2023/10/frc-d75eba0e3b1de1f8e023e8ffca0b2bcd.png)
![](/wp-content/uploads/2023/10/frc-a34b86e29ff087bac3353239abb3a4c9.png)
-
invokeMethod方法这里通过反射进行获取调用方法的参数和名称,然后进行调用
![](/wp-content/uploads/2023/10/frc-fc42921fa009885a6dcaa672002606f7.png)
-
现在我们知道我们执行了传入的这个方法,那么这个方法的在哪呢?其实在task包下。所以我们如果想在若依里面实现自己的定时任务,直接在这个包下面写要处理的逻辑就行啦,但是有一点要注意的是若依设置了个白名单,因此这些自定义的定时任务逻辑要卸载con.ruoyi包下。
![](/wp-content/uploads/2023/10/frc-cc320ca5d2431467bb4f9678a291aeb5.png)
![](/wp-content/uploads/2023/10/frc-9f330614c82aefb6bc8019e135f67011.png)
设置了白名单
![](/wp-content/uploads/2023/10/frc-9014a92621a8b0c57b8a9b8226ca26a6.png)
第二步构建JobDetail
![](/wp-content/uploads/2023/10/frc-99de73996134f028d8a1d89e5ea8bed6.png)
这里的jobId和jobGroup对应的是
![](/wp-content/uploads/2023/10/frc-848448638835f314c277812d0e8f6f28.png)
第三步构建trigger
![](/wp-content/uploads/2023/10/frc-bca2ce571608a25a28d0321a6bfaaf88.png)
前面两行代码对应的就是这两个
![](/wp-content/uploads/2023/10/frc-939ff169a6d9441a2a2f8633e2b038bd.png)
第四步把任务给调度器
![](/wp-content/uploads/2023/10/frc-c10d9fbe3dec219e750da168ef2d3da2.png)