XxlJob,一个定时任务系统
https://www.xuxueli.com/xxl-job/
git clone https://gitee.com/xuxueli0323/xxl-job.git
admin启动
启动并初始化DB
本地启动MySQL
1 | doc/db/tables_xxl_job.sql |
修改application.properties
spring.datasource:数据库配置xxl.job.accessToken:客户端注册需要,客户端服务端一致即可
客户端
参数
xxl.job.admin.addresses:admin地址xxl.job.executor.appname:应用名,全局唯一
发现任务
- 普通模式:手动设置
BeanList,XxlJobSimpleExecutor.setXxlJobBeanList - Spring模式:自动寻找,
XxlJobSpringExecutor.afterSingletonsInstantiated
调度原理
JobScheduleHelper- 每个任务保存下次执行的时间
调度流程:
- 每秒执行
- 查找未来5秒的任务
- 如果任务过期5秒,触发过期策略
- 如果当前时间超过执行时间,则执行
- 如果任务下次执行在5秒内,则加入时间轮
- 当前时间未到执行时间,加入时间轮
- 计算下一次执行时间
时间轮调度
- 每秒执行
- 取当前秒和前一秒的任务执行
日志(XxlJobHelper.log)保存
xxl.job.executor.logpath- 前端发起查看日志请求,admin找到对应执行器的IP,admin通过ExecutorBizClient发送请求到执行器,执行器使用ExecutorBizImpl从文件中读取日志
- 可能存在的问题:
- 如果执行器发布,导致节点变更,是否会丢失执行日志