跳到正文

XXL-JOB 学习路线 ​

适用版本:XXL-JOB 2.3.x / 2.4.0。按 01→07 读:先建立 Admin + Executor + MySQL 的坐标系,再看一次执行怎么流转,最后看调优、故障和选型。

八篇顺序 ​

篇一句话
01-架构总览与核心概念Admin 管调度、Executor 管执行、MySQL 存 8 张表;触发靠 JobScheduleHelper 扫表,不是 Quartz Scheduler。
02-任务生命周期与状态机没有 8 态状态机,只有 trigger_status、trigger_code、handle_code;Executor 只在结束时回调一次。
03-调度核心机制5 秒预读 + 60 槽秒级时间环 + xxl_job_lock 行锁;分片广播的 shardTotal 等于注册实例数。
04-通信协议与路由策略双向 HTTP:/run 送达、/api/callback 报结果、/beat 探活、/idleBeat 探空闲;回调重试不重跑 Handler。
05-心跳与故障剔除Executor 30 秒心跳,Admin 30 秒扫描、90 秒判死;实际消失窗口是 90–120 秒。
06-设计取舍与对比极简主义的五组取舍,以及与 ElasticJob、SchedulerX 的适用边界。
07-生产踩坑与运维兜底积压、回调丢失、重复执行、分片放大、日志膨胀五类事故的现象、证据、根因和处置。

版本与部署前置 ​

  • JDK 8+、MySQL 5.7/8.0、Maven 3.6+。
  • 导入 doc/db/tables_xxl_job.sql,默认库名 xxl_job,应有 8 张表:xxl_job_info、xxl_job_log、xxl_job_log_report、xxl_job_logglue、xxl_job_group、xxl_job_registry、xxl_job_user、xxl_job_lock。
  • Admin 默认端口 8080、上下文 /xxl-job-admin;Executor 默认端口 9999;两端 xxl.job.accessToken 必须一致。
  • 不需要 ZooKeeper,也不需要 Quartz 集群;但需要 MySQL 高可用,多台 Admin 需要 NTP 同步。
  • 默认日志表没有分区,清理靠分批 DELETE,保留天数由 xxl.job.logretentiondays 控制。

自检清单 ​

  • [ ] 能说清 Admin、Executor、MySQL 各自负责什么,以及一次 /run + /callback 的完整链路。
  • [ ] 能解释为什么调度不是 Quartz Scheduler 触发,xxl_job_lock 为什么没有 30 秒租约。
  • [ ] 能列出默认 schema 的 8 张表,并说出 xxl_job_group 与 xxl_job_registry 的区别。
  • [ ] 能本地起 Admin 和一个 Executor,创建任务、手动触发,并在 xxl_job_log 里读出调度和执行结果。
  • [ ] 能解释 trigger_code 与 handle_code 的组合,以及 handle_time 为什么不是开始时间。
  • [ ] 能解释分片广播的 shardTotal 为什么不能独立设成 60。
  • [ ] 能停掉一个 Executor,用 SQL 观察它从注册表和 address_list 消失的时间窗口。
  • [ ] 知道回调丢失时先核对业务结果,而不是直接重跑;知道锁等待不能用 UPDATE xxl_job_lock 解决。

适用 XXL-JOB 2.3.x / 2.4.0 | 初稿 2026-10

生产检查清单 ​

上线前、运行中、故障时逐条核对:99-生产检查清单。

把一门技术讲透到既懂也会用