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