XXL-JOB:揭秘定时机制

1 引言

XXL-JOB 是一个优秀的分布式任务调度框架。一个好的框架底层都是枯燥无味的底层代码,经过架构师的设计、编排以及包装后,最后呈现给使用者的就是比较好用的功能模块,无需在关心底层的具体实现,直接使用即可。

但是它的底层会像我们在单体项目中那样,使用Timer@ScheduledSchedulingConfigurer 还是Quartz ?今天我们一起来探索一下。

2 源码链路追踪

xxl-job-admin 模块启动之后,就是自动执行com.xxl.job.admin.core.conf.XxlJobAdminConfig#afterPropertiesSet方法,然后通过com.xxl.job.admin.core.thread.JobScheduleHelper#start 获取要执行的任务。

3 关键源码解析-初始化

com.xxl.job.admin.core.conf.XxlJobAdminConfig#afterPropertiesSet

项目启动初始化XxlJobScheduler 调度器

4 关键代码解析-任务调度

com.xxl.job.admin.core.thread.JobScheduleHelper#start

又在线程里面使用了带开关的死循环,来处理任务。

这里面有三个重点代码已经标出:

① 数据库锁:

采用了原生的jdbc,查询SQL直接加锁的方式防止乱序。

② 查询预执行的任务:

获取下一次执行时间和当前时间相差5s(PRE_READ_MS)之内预执行的任务,这些任务将会被直接执行。

③ 执行任务:

直接触发业务代码,执行调度任务。

5 小结

从分析的源码来看,这直接以数据库为依托,即开启了手动提交事务,又做了同步锁。每处理完一批数据,才提交事务。提交完事务,在进行下一次的循环。

END


喜欢就点赞收藏,也可以关注我的微信公众号:编程朝花夕拾

相关推荐
一 乐1 分钟前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
KIKIiiiiiiii2 分钟前
微信个人号API二次开发中的解决经验
java·人工智能·python·微信
80530单词突击赢3 分钟前
SpringBoot整合SpringMVC全解析
java·spring boot·后端
vx1_Biye_Design13 分钟前
基于Spring Boot+Vue的学生管理系统设计与实现-计算机毕业设计源码46223
java·vue.js·spring boot·spring·eclipse·tomcat·maven
vx_Biye_Design14 分钟前
基于Spring Boot+vue的湖北旅游景点门票预约平台的设计--毕设附源码29593
java·vue.js·spring boot·spring cloud·servlet·eclipse·课程设计
hdsoft_huge19 分钟前
1panel面板中部署SpringBoot和Vue前后端分离系统 【图文教程】
vue.js·spring boot·后端
七牛云行业应用27 分钟前
Moltbook一夜崩盘:150万密钥泄露背后的架构“死穴”与重构实战
网络安全·postgresql·架构·高并发·七牛云
hay_lee33 分钟前
Spring AI实现对话聊天-流式输出
java·人工智能·ollama·spring ai
Hx_Ma1638 分钟前
SpringBoot数据源自动管理
java·spring boot·spring
SunnyDays101139 分钟前
Java 高效实现 CSV 转 Excel
java·csv转excel