SpringBoot @Scheduled 与 Quartz 对比:分布式定时任务选型实战
1. 定位与设计目标
1.1. @Scheduled 注解
- 轻量级单机调度:Spring 框架原生支持的简单定时任务工具,无需引入额外依赖。
- 场景适用:适用于单应用实例、无需复杂调度逻辑的定时任务(如数据清理、缓存刷新)。
- 设计核心:基于内存的任务调度,依赖 Spring 容器生命周期管理。
1.2. 定时任务框架(如 Quartz、XXL-JOB)
- 企业级调度平台:面向分布式、高可用、复杂调度需求的场景(如任务分片、失败重试、依赖管理)。
- 核心能力:支持任务持久化、集群部署、动态配置、监控报警等生产级功能。
- 扩展性:提供插件机制、任务管理界面(如 XXL-JOB 的 Admin 控制台)。
2. 特性对比
| 特性 | @Scheduled | 定时任务框架(以 Quartz 为例) |
|---|---|---|
| 任务持久化 | ❌ 任务信息仅存于内存 | ✅ 支持数据库持久化,任务可恢复 |
| 分布式调度 | ❌ 单机运行,多实例会重复执行 | ✅ 集群环境下任务互斥,避免重复执行 |
| 动态调整任务 | ❌ 需重启应用修改配置 | ✅ 支持运行时动态修改触发规则 |
| 失败重试机制 | ❌ 默认无重试 | ✅ 支持自定义重试策略和次数 |
| 任务分片 | ❌ 不支持 | ✅ 支持任务分片执行(如 Elastic Job) |
| 任务依赖管理 | ❌ 不支持 | ✅ 支持任务链式或 DAG 依赖调度 |
| 监控与管理界面 | ❌ 无 | ✅ 提供 Web 控制台(如 XXL-JOB) |
| Cron 表达式灵活性 | ✅ 支持标准 Cron | ✅ 支持扩展 Cron(如 Quartz 的秒级精度) |
| 任务执行线程池 | ✅ 可自定义 TaskScheduler | ✅ 提供线程池配置和任务队列管理 |


