XXL-JOB定时任务
定时任务解决方案对比
单机模式 - Spring @Scheduled
使用方式:
- 启动类添加注解
@EnableScheduling
- 定时方法添加注解
@Scheduled(cron = "0 0 2 * * ?")
集群环境问题:
- 当用户下单成功后,后台发送短信时:
- 集群中多个服务实例会同时触发定时任务
- 导致重复发送短信,影响用户体验
分布式方案 - XXL-JOB
版本要求:
- 3.x 版本:需要 JDK17
- 2.x 及以下:支持 JDK1.8
源码获取:
- 官网文档: https://www.xuxueli.com/xxl-job/#%E4%BA%8C%E3%80%81%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8
- 源码仓库: https://gitee.com/xuxueli0323/xxl-job
源码结构
源码结构:(调度中心需要部署, xxl-job-executor-samples是给的示例项目, xxl-job-core是项目需要映入的公共依赖)
xxl-job-admin:调度中心
xxl-job-core:公共依赖
xxl-job-executor-samples:执行器Sample示例(选择合适的版本执行器,可直接使用,也可以参考其并将现有项目改造成执行器)
:xxl-job-executor-sample-springboot:Springboot版本,通过Springboot管理执行器,推荐这种方式;
:xxl-job-executor-sample-frameless:无框架版本;
部署步骤
1. 调度中心部署
- 执行SQL建表:
/xxl-job/doc/db/tables_xxl_job.sql
- 修改配置:
application.properties
(主要是MySQL连接信息) - 部署
xxl-job-admin
项目 - 访问地址: http://localhost:8080/xxl-job-admin
- 默认账号:admin/123456
2. 执行器部署(集成到业务项目)
- 引入依赖:
xxl-job-core
- 增加配置:
xxl-job admin address
(调度中心地址)xxl-job executor
相关配置
- 增加执行器组件配置类
- 启动项目
配置关联:
- 调度中心 → 执行器管理 → 新增
- AppName 需与配置项
xxl.job.executor.appname
一致
- AppName 需与配置项
- 调度中心 → 任务管理 → 新增
- 选择执行器
- JobHandler 配置需与代码中的
@XxlJob("demoJobHandler")
名称一致