什么是 XXL-JOB

XXL-JOB 是一个开源的 分布式任务调度平台,用来代替传统的 Quartz、Spring Task 等。

主要功能

  • 定时任务调度(支持 CRON 表达式)
  • 分布式执行(多个执行器节点)
  • 可视化任务管理(Web 控制台)
  • 执行日志在线查看
  • 失败重试 & 失败告警
  • 分片广播任务(支持大任务拆分成子任务并行执行)

📌 XXL-JOB 典型架构

  1. 调度中心(xxl-job-admin)
  • 提供任务管理后台(新建任务、修改、暂停、删除)
  • 负责任务调度、分发给执行器
  • 管理任务执行日志、失败告警等
  1. 执行器(xxl-job-executor)
  • 部署在业务服务里
  • 接收调度中心的任务调度请求
  • 执行业务逻辑
  1. 调度中心和执行器通过 HTTP 通信。

📌 使用步骤

  1. 接入执行器
  • 在业务项目里引入 xxl-job-core 依赖
  • 配置执行器信息(执行器名称、调度中心地址)
    • nacos 或者 yaml文件配置
  • 编写任务方法(加上 @XxlJob(“handlerName”) 注解)
    1
    2
    3
    4
    5
    6
    7
    8
    9
    @Component
    public class DemoJob {

    @XxlJob("demoHandler")
    public void demoJobHandler() throws Exception {
    System.out.println("执行任务: " + new Date());
    }
    }

  1. 登录 管理后台 配置执行器
  • 选择执行器
  • 填写 JobHandler 名称(比如 demoHandler)
  • 配置 CRON 表达式(比如 0 0/5 * ? 每 5 分钟执行一次)
  • 保存并启动任务



总结

  1. 为什么 Spring Task 不适合分布式
  • 因为 Spring Task 是基于JVM的,如果一个服务 有一个Spring Task 定时任务,但他有三个实例,那么这个定时任务会被三个实例都执行
  1. 为什么 XXL-JOB 适合 分布式
  • 在 XXL-JOB 里,有一个独立的 调度中心(xxl-job-admin),负责统一下发任务,实例(执行器)只负责接收并执行。
    • 👉 这样即使部署多个节点,也不会发生 重复执行,因为调度中心可以确保只派发一次任务。
  • 📌 3. 分布式任务分片
    • XXL-JOB 支持分片广播:
    • 比如一个任务需要处理 1000 万条数据,可以拆成 10 份。
    • 调度中心会把任务分成 10 片,分配给不同的执行器实例跑。
    • 👉 分布式系统里最需要的就是这种 并行处理能力,Spring Task 天然做不到。
对比点Spring TaskXXL-JOB
部署方式嵌入应用,随应用启动独立调度中心 + 执行器(分布式)
定时配置写在代码里,需重新发布可视化管理后台,支持动态修改
集群支持不支持(需自己加分布式锁)原生支持,任务只会执行一次
扩展能力弱,适合小规模强,支持分片、路由策略、负载均衡
日志 & 监控自己实现自带调度日志、执行日志、失败告警
使用场景单机任务、轻量定时任务分布式任务、复杂调度、大规模批处理