--------------------------------------------------------------------------
XXL-JOB 的数据库表设计围绕分布式任务调度的核心功能展开,主要包括任务配置、执行器管理、日志记录、状态监控等模块。以下是核心表的详细解析(基于 2.4.0+ 版本):
一、核心配置表
1. xxl_job_group - 执行器分组表
- 作用:管理任务执行器(Executor)的分组信息,支持按业务维度隔离任务。
- 关键字段:
字段名 类型 说明 idint(11)主键 ID app_namevarchar(64)执行器的应用名称(用于自动注册时的分组标识) titlevarchar(64)执行器的显示名称(控制台展示) address_typeint(4)执行器地址类型: 0- 自动注册(执行器主动上报地址)1- 手动录入地址列表address_listvarchar(512)执行器地址列表(手动录入时使用,格式: IP1:PORT,IP2:PORT) - 关联关系:
xxl_job_info通过job_group字段关联执行器分组。
2. xxl_job_info - 任务信息表
- 作用:存储所有任务的元数据配置,包括调度策略、执行逻辑、报警规则等。
- 关键字段:
字段名 类型 说明 idint(11)任务 ID job_groupint(11)执行器分组 ID(关联 xxl_job_group)schedule_typevarchar(50)调度类型: CRON- Cron 表达式FIX_RATE- 固定频率(毫秒)FIX_DELAY- 固定延迟(毫秒)schedule_confvarchar(128)调度配置: 对CRON是 Cron 表达式,对FIX_RATE是间隔时间executor_route_strategyvarchar(50)执行器路由策略: FIRST- 第一个存活实例ROUND- 轮询RANDOM- 随机executor_handlervarchar(255)执行器任务处理器名称(对应 @XxlJob注解的 value)glue_typevarchar(50)任务类型: BEAN- Java 方法GLUE_GROOVY- Groovy 脚本trigger_statustinyint(4)任务状态: 0- 停止1- 运行trigger_last_timebigint(13)上次触发时间(时间戳,毫秒) trigger_next_timebigint(13)下次触发时间(时间戳,毫秒) - 示例 SQL:
sql
CREATE TABLE `xxl_job_info` (`id` int(11) NOT NULL AUTO_INCREMENT,`job_group` int(11) NOT NULL,`schedule_type` varchar(50) NOT NULL DEFAULT 'CRON',`schedule_conf` varchar(128) DEFAULT NULL,`executor_route_strategy` varchar(50) DEFAULT NULL,`executor_handler` varchar(255) DEFAULT NULL,`glue_type` varchar(50) NOT NULL,`trigger_status` tinyint(4) NOT NULL DEFAULT '0',PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
二、任务执行与日志表
3. xxl_job_log - 任务日志表
- 作用:记录任务执行的详细日志,包括触发结果、执行耗时、异常信息等。
- 关键字段:
字段名 类型 说明 idbigint(20)日志 ID job_idint(11)关联的任务 ID(对应 xxl_job_info.id)trigger_timedatetime任务触发时间 trigger_codeint(11)触发状态码: 200- 成功500- 失败handle_timedatetime任务开始执行时间 handle_codeint(11)执行状态码: 200- 成功500- 失败0- 执行中alarm_statustinyint(4)告警状态: 0- 未告警1- 无需告警2- 告警成功3- 告警失败 - 关联关系:通过
job_id关联xxl_job_info,通过executor_address关联执行器实例。
4. xxl_job_log_report - 日志报表表
- 作用:按天统计任务执行情况,用于控制台报表展示。
- 关键字段:
字段名 类型 说明 idint(11)报表 ID trigger_daydatetime统计日期(精确到天) suc_countint(11)当天成功任务数 fail_countint(11)当天失败任务数 - 数据更新:调度中心每分钟自动统计前一天的日志数据。
三、动态注册与锁表
5. xxl_job_registry - 执行器注册表
- 作用:存储执行器和调度中心的动态注册信息,实现执行器地址的自动发现。
- 关键字段:
字段名 类型 说明 registry_groupvarchar(50)注册类型: EXECUTOR- 执行器ADMIN- 调度中心registry_keyvarchar(255)注册键(对 EXECUTOR是app_name,对ADMIN是调度中心地址)registry_valuevarchar(255)注册值(执行器的地址或调度中心的地址) - 机制:
- 执行器启动后向调度中心注册地址,调度中心每 30 秒清理超时 90 秒未心跳的执行器。
- 调度中心根据
registry_value动态维护可用执行器列表。
6. xxl_job_lock - 任务锁表
- 作用:通过数据库行锁实现分布式任务调度的并发控制。
- 关键字段:
字段名 类型 说明 lock_namevarchar(50)锁名称: schedule_lock- 全局调度锁state_access- 任务状态锁 - 示例:
- 调度中心触发任务时,通过
state_access锁确保同一任务不会被多个线程重复触发。 - 执行器回调更新任务状态时,需获取
state_access锁保证原子性。
- 调度中心触发任务时,通过
四、系统与扩展表
7. xxl_job_user - 用户表
- 作用:存储平台用户信息,支持权限管理。
- 关键字段:
字段名 类型 说明 usernamevarchar(50)用户名(唯一) passwordvarchar(50)密码(MD5 加密) roletinyint(4)角色: 0- 普通用户1- 管理员permissionvarchar(255)权限(执行器 ID 列表,逗号分隔)
8. xxl_job_logglue - GLUE 日志表
- 作用:存储 GLUE 脚本的历史版本,支持版本回溯。
- 关键字段:
字段名 类型 说明 job_idint(11)关联的任务 ID glue_sourcemediumtextGLUE 脚本内容 glue_updatetimedatetime脚本更新时间
五、表间关系与核心流程
-
任务注册:
- 用户在控制台创建任务,数据写入
xxl_job_info,关联xxl_job_group中的执行器分组。 - 执行器启动后向
xxl_job_registry表注册地址,调度中心自动发现可用执行器。
- 用户在控制台创建任务,数据写入
-
任务触发:
- 调度中心扫描
xxl_job_info中trigger_next_time <= 当前时间的任务。 - 获取
xxl_job_lock锁后,更新任务状态并记录日志到xxl_job_log。
- 调度中心扫描
-
任务执行:
- 调度中心通过
xxl_job_registry获取执行器地址,调用执行器接口。 - 执行器执行任务后,回调调度中心更新
xxl_job_log中的handle_code和handle_msg。
- 调度中心通过
-
日志与监控:
xxl_job_log记录每次执行的详细信息,xxl_job_log_report按天统计执行结果。- 控制台通过查询这些表展示任务状态、执行趋势等信息。
六、注意事项
- 版本差异:
- 2.3.0 及之前版本包含
xxl_job_qrtz_xxx表(基于 Quartz 调度),2.4.0+ 版本已将其功能整合到xxl_job_info表。
- 2.3.0 及之前版本包含
- 性能优化:
xxl_job_log表数据量可能快速增长,建议定期清理历史日志(通过配置xxl.job.logretentiondays自动清理)。
- 分布式锁机制:
xxl_job_lock表依赖数据库行锁,在高并发场景下可能成为性能瓶颈,需根据实际情况评估是否替换为 Redis 等分布式锁。
通过以上表结构,可深入理解 XXL-JOB 的任务调度、执行、监控等核心功能,为系统运维和二次开发提供数据层面的支持。
--------------------------------------------------------------------------
XXL-JOB 各版本在功能、架构和稳定性上持续迭代,以下是核心版本的关键区别:
一、2.3.0 版本(2022 年)
核心改进:
- 调度过期策略
新增「忽略」或「立即补偿触发一次」策略,解决调度中心因延迟导致的任务漏触发问题。
- 触发方式扩展
除 Cron 外,新增「固定间隔触发」和实验性「固定延时触发」,支持更灵活的任务调度场景。
- 任务辅助工具
引入
XxlJobHelper,统一提供任务参数获取、日志输出、分片参数解析等能力,简化开发流程。 - 执行器注册优化
注册逻辑改为异步方式,提升高并发场景下的注册性能;新增
accessToken校验,增强安全性。 - Cron 编辑器增强
支持实时预览最近运行时间,修复小概率字段重置问题,提升配置体验。
- 数据库适配
优化 Oracle 数据库兼容性,调整 SQL 语法和分页查询逻辑。
二、2.4.0 版本(2023 年)
架构与功能重大升级:
- 移除 Quartz 依赖
彻底废弃 Quartz 调度引擎,自研轻量级调度模块,大幅简化数据库表结构(移除
xxl_job_qrtz_xxx表),提升调度性能和稳定性。 - 任务分片与广播
支持分布式任务分片(Sharding),可将大数据量任务拆分为多个子任务并行执行;新增「广播任务」模式,所有执行器同时执行同一任务。
- GLUE 脚本增强
支持 Java、Shell、Python、PHP、NodeJS 等多语言脚本,任务逻辑可直接在控制台编辑并动态生效,无需重启应用。
- 执行器注册机制
执行器通过 HTTP 接口自动注册到调度中心,支持动态扩缩容和故障转移,替代传统数据库表注册方式。
- 权限控制优化
新增用户角色管理(管理员、普通用户),支持按执行器分组配置权限,实现精细化操作控制。
- 高可用与安全
调度中心集群部署支持自动选举主节点;修复 SSRF、XSS 等安全漏洞,但早期版本(如 2.4.0)仍存在权限绕过风险,需及时升级至 2.4.1+。
三、2.5.0 版本(2025 年)
性能与稳定性优化:
- 线程池与队列优化
调整快慢线程池拒绝策略,避免任务积压导致的结果丢失;优化队列长度,提升突发流量处理能力。
- 日志表索引优化
对
xxl_job_log表添加复合索引,显著提升大日志量场景下的查询和清理速度。 - 执行器注册重构
降低多调度中心地址时的并发注册冲突,新增唯一索引防止冗余数据。
- 依赖升级
更新 Netty、Slf4j 等基础组件至最新稳定版本,提升框架兼容性和安全性。
- 长期维护支持
作为 JDK 8 最后一个大版本,提供长期漏洞修复和性能优化。
四、各版本核心功能对比表
| 功能特性 | 2.3.0 及以下 | 2.4.0+ | 2.5.0+ |
|---|---|---|---|
| 调度引擎 | Quartz | 自研 | 自研 |
| 任务分片与广播 | ❌ | ✅ | ✅ |
| GLUE 多语言支持 | 有限(Java) | ✅ | ✅ |
| 执行器自动注册 | 数据库表 | HTTP | HTTP |
| 权限控制 | 基础 | 角色管理 | 角色管理 |
| 日志表索引优化 | ❌ | ❌ | ✅ |
| 高可用机制 | 数据库锁 | 集群选举 | 集群选举 |
| 安全漏洞修复 | 部分 | 持续 | 持续 |
五、升级建议
-
2.3.x → 2.4.x
- 需手动迁移数据库表结构(移除 Quartz 相关表,新增
xxl_job_log分片字段)。 - 执行器配置需调整注册方式(HTTP 接口替代数据库表)。
- 建议直接升级至 2.4.1+ 以规避 SSRF 等安全风险。
- 需手动迁移数据库表结构(移除 Quartz 相关表,新增
-
2.4.x → 2.5.x
- 数据模型和通讯协议兼容,可无缝升级。
- 建议同步优化
xxl_job_log表索引以提升性能。
-
长期维护选择
- 优先使用 2.5.x 版本,享受 JDK 8 长期支持和最新安全修复。
- 计划迁移至 JDK 11+ 的用户可关注 3.0+ 版本(规划中)。
通过以上版本对比,可根据业务需求和技术栈选择最适合的版本,重点关注架构升级、功能扩展和安全性修复。
--------------------------------------------------------------------------
xxl-job 下载地址
一、如何将 XXL-JOB 从 Quartz 切换到自研调度引擎
XXL-JOB 在 2.4.0 版本及以上 彻底移除了 Quartz 依赖,改用自研调度引擎。因此,“从 Quartz 切换到自研引擎” 本质上是将 XXL-JOB 升级到 2.4.0 及以上版本。以下是详细步骤:
1. 确认当前版本
- 若当前版本为 2.3.x 及以下:依赖 Quartz 调度引擎,需升级到 2.4.0 + 版本以切换到自研引擎。
- 若已为 2.4.0+:默认使用自研引擎,无需额外操作。
2. 升级前准备
- 备份数据:备份现有 XXL-JOB 数据库(尤其是
xxl_job_info、xxl_job_log等核心表),避免升级过程中数据丢失。 - 查看官方升级文档:参考对应版本的 Release Notes(如2.4.0 Release),确认兼容性注意事项。
3. 数据库表结构迁移(核心步骤)
2.4.0 + 版本移除了 Quartz 相关表(如
xxl_job_qrtz_trigger、xxl_job_qrtz_cron_triggers等),并调整了部分核心表结构。需执行官方提供的升级脚本:- 脚本位置:从 XXL-JOB 源码的
doc/db目录中获取对应版本的升级脚本(如xxl_job_upgrade.sql),或直接参考官方文档中的 SQL 语句。 - 核心变更:
- 删除所有
xxl_job_qrtz_*前缀的 Quartz 表; - 对
xxl_job_info表新增字段(如executor_block_strategy用于任务阻塞策略); - 调整
xxl_job_log表索引,优化查询性能。
- 删除所有
4. 调度中心升级
- 替换源码 / 依赖:
- 若使用源码部署:下载 2.4.0 + 版本源码,替换原调度中心(
xxl-job-admin)代码,重新编译打包。 - 若使用 Maven 依赖:在
pom.xml中升级xxl-job-core版本(如2.4.0):xml<dependency><groupId>com.xuxueli</groupId><artifactId>xxl-job-core</artifactId><version>2.4.0</version> <!-- 或更高版本 --> </dependency>
- 若使用源码部署:下载 2.4.0 + 版本源码,替换原调度中心(
- 调整配置文件:
- 2.4.0 + 版本移除了 Quartz 相关配置(如
quartz前缀的配置),无需保留; - 确保数据库连接配置正确(指向升级后的数据库)。
- 2.4.0 + 版本移除了 Quartz 相关配置(如
5. 执行器升级
- 依赖升级:同调度中心,将执行器项目的
xxl-job-core依赖升级到 2.4.0 + 版本。 - 适配注册机制:
2.4.0 + 版本执行器注册方式从 “数据库表注册” 改为 “HTTP 主动注册”,需调整执行器配置:properties
# 执行器配置(application.properties) xxl.job.admin.addresses=http://127.0.0.1:8080/xxl-job-admin # 调度中心地址(必填) xxl.job.executor.appname=your-executor-appname # 执行器应用名(需与调度中心配置一致) xxl.job.executor.port=9999 # 执行器端口(可选,默认自动分配) - 代码兼容性:
- 2.4.0 + 版本的
@XxlJob注解用法不变,无需修改任务代码; - 若使用了 Quartz 相关 API(如
XxlJobQuartz),需移除并替换为自研引擎的 API(参考官方示例)。
- 2.4.0 + 版本的
6. 验证升级结果
- 启动调度中心和执行器,确认无报错;
- 在调度中心控制台查看任务列表,确认历史任务配置已迁移;
- 手动触发一个任务,检查
xxl_job_log表是否正常记录日志,验证调度引擎工作正常。
二、XXL-JOB 下载地址
XXL-JOB 的官方下载渠道为 GitHub,支持源码下载和 RELEASE 包下载:
-
官方仓库:https://github.com/xuxueli/xxl-job
-
RELEASE 包下载:进入 GitHub Releases 页面,选择对应版本(2.4.0 + 版本为自研引擎):https://github.com/xuxueli/xxl-job/releases
- 推荐下载
xxl-job-admin-${version}.jar(调度中心可直接运行的 JAR 包); - 源码包(
Source code)包含完整项目代码和数据库脚本。
- 推荐下载
注意事项
- 升级后首次启动调度中心时,会自动初始化自研引擎的元数据,无需额外操作;
- 若升级后任务调度异常,优先检查数据库表结构是否正确迁移(尤其是索引和新增字段);
- 生产环境建议先在测试环境验证升级,确认兼容性后再迁移至生产。
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
--------------------------------------------------------------------------
