目录
一、Quartz 核心概念(生产必懂)
1. 三大核心组件
2. 运行模式(生产二选一)
3. Cron 表达式(生产常用规则)
二、SpringBoot 整合 Quartz(生产基础架构)
环境依赖(Maven)
步骤 1:初始化 Quartz 数据库表(生产第一步)
步骤 2:application.yml 生产配置(持久化 + 基础参数)
步骤 3:编写业务 Job(生产标准写法)
3.1 普通任务(允许并发)
3.2 禁止并发任务(生产高频:订单结算、库存盘点)
步骤 4:静态定时任务(项目启动即注册)
三、生产核心进阶:动态任务(后台新增 / 编辑 / 暂停 / 删除)
封装工具类(通用动态任务工具)
接口调用示例(Controller)
四、Quartz 集群高可用(生产重中之重)
1. 集群原理
2. 集群部署要求(必须遵守)
3. 集群故障演练(线上验证)
4. 集群常见问题
五、生产环境高频坑 & 解决方案
坑 1:任务执行时间过长,叠加触发(重复执行)
坑 2:服务重启后任务丢失
坑 3:服务优雅关闭失败,进程杀不掉
坑 4:Cron 表达式写错,任务不执行
坑 5:长任务阻塞线程池,所有定时都卡住
坑 6:集群下任务随机不执行
六、生产监控与运维(线上必备)
1. 日志规范
2. 监控指标(对接 Prometheus/ELK/ 告警)
3. Misfire(错失触发)策略(生产关键)
七、生产最佳实践总结
八、扩展:Quartz 与 XXL-Job 选型(生产参考)
本文基于 Quartz 2.x + Spring/SpringBoot,聚焦生产落地、避坑、高可用、运维、问题排查,从基础使用到集群、持久化、动态任务、监控逐一讲解,全部为线上通用方案。
一、Quartz 核心概念(生产必懂)
1. 三大核心组件
- Job:单次执行任务接口
- StatefulJob(旧)/ 注解 @DisallowConcurrentExecution:禁止并发执行同一个任务实例
- SimpleTrigger:固定间隔、固定次数(轮询、简单定时)
- CronTrigger:Cron 表达式(生产最常用,复杂时间规则)
2. 运行模式(生产二选一)
- 内存模式(RAMJobStore) 任务存在内存,重启服务全部丢失,单机临时任务使用,禁止生产核心定时。
- 数据库持久化模式(JDBCJobStore) 任务、状态、执行记录落库,支持集群、故障转移、重启恢复,生产标准方案。
3. Cron 表达式(生产常用规则)
格式:秒 分 时 日 月 周 年(可选)
* 每秒/每分
? 不指定(日/周互斥,只能一个写?)
– 范围
, 枚举
/ 步长
L 最后一天
W 工作日
# 第几个星期
生产常用示例:
0 0/5 * * * ? 每5分钟执行
0 30 1 * * ? 每天凌晨1:30执行
0 0 2 * * ? 每天凌晨2点执行(数据同步、报表)
0 0 18 ? * MON-FRI 工作日每天18点执行
二、SpringBoot 整合 Quartz(生产基础架构)
环境依赖(Maven)
<!– SpringBoot 整合 Quartz 官方 starter –>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-quartz</artifactId>
</dependency>
<!– 数据库(持久化必备) –>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
</dependency>
步骤 1:初始化 Quartz 数据库表(生产第一步)
持久化模式必须先执行官方建表语句,不同数据库脚本在 quartz.jar 包内: org/quartz/impl/jdbcjobstore/tables_xxx.sql
MySQL 表清单(核心表):
- qrtz_job_details:任务详情
- qrtz_triggers:触发器
- qrtz_cron_triggers:Cron 触发器配置
- qrtz_scheduler_state:集群节点状态
- qrtz_locks:分布式锁(集群防并发)
线上建议:单独库 / 单独表空间,和业务库解耦。
步骤 2:application.yml 生产配置(持久化 + 基础参数)
spring:
# 数据源(Quartz 复用业务数据源,也可单独配置)
datasource:
druid:
url: jdbc:mysql://127.0.0.1:3306/quartz_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&allowMultiQueries=true
username: root
password: xxx
driver-class-name: com.mysql.cj.jdbc.Driver
# Quartz 生产核心配置
quartz:
# 任务持久化:jdbc=数据库 memory=内存
job-store-type: jdbc
# 应用启动时,是否初始化表(生产关闭!只首次部署开一次)
jdbc:
initialize-schema: never
# 关闭自动启动(部分场景需要手动控制调度器)
auto-startup: true
# 定时任务线程池配置(根据业务压测调参)
thread-pool:
thread-name-prefix: quartz-task-
thread-count: 10 # 并发任务最大数,生产根据QPS设置
# 原生 Quartz 底层配置(重点)
properties:
org:
quartz:
# 调度器实例名称(集群所有节点必须一致)
scheduler:
instanceName: quartz-cluster-scheduler
# 集群开关:true=开启集群(高可用必备)
instanceId: AUTO # 自动生成节点ID,集群推荐
# 数据库存储配置
jobStore:
class: org.quartz.impl.jdbcjobstore.JobStoreTX
driverDelegateClass: org.quartz.impl.jdbcjobstore.StdJDBCDelegate
tablePrefix: QRTZ_ # 表前缀,和建表语句一致
useProperties: false
# 集群核心配置
clusterCheckinInterval: 10000 # 节点心跳间隔(ms)
isClustered: true # 开启集群
# 线程池
threadPool:
class: org.quartz.simpl.SimpleThreadPool
makeThreadsDaemons: true # 守护线程,不阻止服务优雅关闭
配置说明(生产关键点)
步骤 3:编写业务 Job(生产标准写法)
3.1 普通任务(允许并发)
i




