Quartz Cron 表达式参考手册

目录

  1. 基础语法
  2. 字段说明
  3. 特殊字符说明
  4. 常用时间表达式
  5. 业务场景案例
  6. 复杂表达式示例
  7. 注意事项
  8. 在线工具

基础语法

Quartz Cron表达式由6个字段组成(从左到右):

秒 分钟 小时 日期 月份 星期
*   *    *    *    *    *

字段范围

字段 允许值 允许的特殊字符
0-59 , - * /
分钟 0-59 , - * /
小时 0-23 , - * /
日期 1-31 , - * ? / L W C
月份 1-12 或 JAN-DEC , - * /
星期 1-7 或 SUN-SAT , - * ? / L C #

字段说明

时间字段

  • :0-59,支持精确到秒的控制
  • 分钟:0-59,一小时内的分钟数
  • 小时:0-23,24小时制
  • 日期:1-31,月份中的第几天
  • 月份:1-12,一年中的第几个月
  • 星期:1-7,星期几(1=周日,7=周六)

月份名称缩写

JAN=1, FEB=2, MAR=3, APR=4, MAY=5, JUN=6
JUL=7, AUG=8, SEP=9, OCT=10, NOV=11, DEC=12

星期名称缩写

SUN=1, MON=2, TUE=3, WED=4, THU=5, FRI=6, SAT=7

特殊字符说明

* 通配符

表示该字段的所有可能值

# 每秒执行
* * * * * *

# 每分钟执行
0 * * * * *

? 不指定值

只能用于日期和星期字段,表示不关心该字段的值

# 每天执行(不关心星期几)
0 0 12 * * ?

# 每周一执行(不关心日期)
0 0 12 ? * MON

- 范围

表示一个范围

# 工作日9-17点每小时执行
0 0 9-17 * * MON-FRI

# 每年1-6月执行
0 0 12 1 1-6 ?

, 列举

表示列举多个值

# 每天8点、12点、18点执行
0 0 8,12,18 * * ?

# 周一、周三、周五执行
0 0 12 ? * MON,WED,FRI

/ 增量

表示起始值/增量

# 从0秒开始,每5秒执行一次
0/5 * * * * ?

# 从第1分钟开始,每2分钟执行一次
0 1/2 * * * ?

L 最后

用于日期和星期字段

# 每月最后一天
0 0 12 L * ?

# 每月最后一个周五
0 0 12 ? * FRIL

W 工作日

最接近指定日期的工作日

# 每月15号最近的工作日
0 0 12 15W * ?

# 第几个

用于星期字段,表示第几个星期几

# 每月第2个周一
0 0 12 ? * MON#2

# 每月第3个周五
0 0 12 ? * FRI#3

常用时间表达式

基础时间间隔

每秒执行

* * * * * *

每分钟执行

0 * * * * *

每小时执行

0 0 * * * *

每天执行

# 每天凌晨12点
0 0 0 * * ?

# 每天早上6点
0 0 6 * * ?

# 每天中午12点
0 0 12 * * ?

# 每天晚上11点30分
0 30 23 * * ?

每周执行

# 每周一早上9点
0 0 9 ? * MON

# 每周五下午5点
0 0 17 ? * FRI

# 每周日晚上8点
0 0 20 ? * SUN

每月执行

# 每月1号早上8点
0 0 8 1 * ?

# 每月15号中午12点
0 0 12 15 * ?

# 每月最后一天晚上11点
0 0 23 L * ?

每年执行

# 每年1月1日凌晨
0 0 0 1 1 ?

# 每年12月25日上午10点
0 0 10 25 12 ?

固定间隔执行

秒级间隔

# 每5秒执行一次
0/5 * * * * ?

# 每10秒执行一次
0/10 * * * * ?

# 每30秒执行一次
0/30 * * * * ?

分钟级间隔

# 每2分钟执行一次
0 0/2 * * * ?

# 每5分钟执行一次
0 0/5 * * * ?

# 每15分钟执行一次
0 0/15 * * * ?

# 每30分钟执行一次
0 0/30 * * * ?

小时级间隔

# 每2小时执行一次
0 0 0/2 * * ?

# 每3小时执行一次
0 0 0/3 * * ?

# 每6小时执行一次
0 0 0/6 * * ?

# 每12小时执行一次
0 0 0/12 * * ?

业务场景案例

系统维护

数据库备份

# 每天凌晨2点备份数据库
0 0 2 * * ?

# 每周日凌晨3点全量备份
0 0 3 ? * SUN

# 每月1号凌晨1点备份
0 0 1 1 * ?

日志清理

# 每天凌晨4点清理日志
0 0 4 * * ?

# 每周六凌晨5点清理临时文件
0 0 5 ? * SAT

系统重启

# 每周日凌晨6点重启服务
0 0 6 ? * SUN

# 每月第一个周日凌晨4点重启
0 0 4 ? * SUN#1

业务流程

报表生成

# 每天早上8点生成日报
0 0 8 * * ?

# 每周一早上9点生成周报
0 0 9 ? * MON

# 每月1号早上10点生成月报
0 0 10 1 * ?

# 每季度第一天生成季报
0 0 10 1 1,4,7,10 ?

邮件发送

# 每天早上9点发送日报邮件
0 0 9 * * ?

# 每周五下午5点发送周报邮件
0 0 17 ? * FRI

# 每月最后一天发送月报邮件
0 0 18 L * ?

数据同步

# 每小时同步一次数据
0 0 * * * ?

# 每30分钟增量同步
0 0/30 * * * ?

# 每天凌晨1点全量同步
0 0 1 * * ?

监控告警

健康检查

# 每分钟检查系统状态
0 * * * * ?

# 每5分钟检查数据库连接
0 0/5 * * * ?

# 每15分钟检查服务可用性
0 0/15 * * * ?

性能监控

# 每10分钟收集性能指标
0 0/10 * * * ?

# 每小时生成性能报告
0 0 * * * ?

电商业务

订单处理

# 每10分钟处理待付款订单
0 0/10 * * * ?

# 每小时检查超时订单
0 0 * * * ?

# 每天凌晨处理退款
0 0 1 * * ?

库存管理

# 每30分钟同步库存
0 0/30 * * * ?

# 每天早上8点更新商品价格
0 0 8 * * ?

促销活动

# 每天0点开始秒杀活动
0 0 0 * * ?

# 每周五晚上8点开始周末促销
0 0 20 ? * FRI

# 双11当天特殊活动
0 0 0 11 11 ?

复杂表达式示例

工作时间相关

工作日执行

# 工作日早上9点到下午5点,每小时执行
0 0 9-17 * * MON-FRI

# 工作日每30分钟执行(9:00-18:00)
0 0/30 9-18 * * MON-FRI

# 工作日午休时间不执行(9-12点,14-18点)
0 0 9-12,14-18 * * MON-FRI

非工作时间执行

# 每天晚上6点后和早上9点前每小时执行
0 0 0-8,18-23 * * ?

# 周末每2小时执行
0 0 0/2 ? * SAT,SUN

特定日期处理

月末处理

# 每月最后一天晚上11点
0 0 23 L * ?

# 每月最后一个工作日下午5点
0 0 17 LW * ?

# 每月倒数第3天
0 0 12 L-3 * ?

特殊日期

# 每月第2个周一
0 0 9 ? * MON#2

# 每月第3个周五
0 0 15 ? * FRI#3

# 每月最后一个周五
0 0 17 ? * FRIL

季度处理

# 每季度第一天(1月、4月、7月、10月的1号)
0 0 8 1 1,4,7,10 ?

# 每季度最后一天
0 0 18 L 3,6,9,12 ?

条件组合

多时间点

# 每天早中晚三次执行
0 0 8,12,18 * * ?

# 工作日多个时间点执行
0 0 9,11,14,16,18 * * MON-FRI

# 周末不同时间执行
0 0 10,15,20 ? * SAT,SUN

复杂时间间隔

# 工作日每15分钟,周末每30分钟
0 0/15 9-18 * * MON-FRI
0 0/30 10-22 ? * SAT,SUN

# 白天每10分钟,夜间每小时
0 0/10 8-22 * * ?
0 0 23-7 * * ?

注意事项

1. 字段冲突

  • 日期和星期字段不能同时指定具体值
  • 必须有一个使用 ? 通配符
# ❌ 错误:同时指定了日期和星期
0 0 12 15 * MON

# ✅ 正确:使用?通配符
0 0 12 15 * ?    # 每月15号
0 0 12 ? * MON   # 每周一

2. 时区考虑

  • Cron表达式基于服务器时区
  • 跨时区部署需要特别注意
  • 夏令时可能影响执行时间

3. 性能考虑

  • 避免过于频繁的执行(如每秒执行)
  • 考虑任务执行时间,避免重叠
  • 合理分散高峰时间的任务

4. 测试建议

  • 使用在线工具验证表达式
  • 在测试环境充分验证
  • 考虑边界情况(月末、年末等)

在线工具

Cron表达式生成器

表达式验证工具


常见问题 FAQ

Q: 为什么我的任务没有按预期执行?

A: 检查以下几点:

  1. 确认服务器时区设置
  2. 验证Cron表达式语法
  3. 检查任务是否被阻塞
  4. 确认调度器是否正常运行

Q: 如何处理跨月份的特殊情况?

A: 使用L、W等特殊字符:

# 每月最后一天
0 0 12 L * ?

# 每月最后一个工作日
0 0 12 LW * ?

Q: 能否在一个表达式中同时指定多个复杂条件?

A: 不建议在单个表达式中使用过于复杂的逻辑,建议:

  1. 拆分为多个简单的Cron表达式
  2. 在业务逻辑中处理复杂条件
  3. 使用编程方式动态调度

posted @ 2025-06-27 18:59  knqiufan  阅读(229)  评论(0)    收藏  举报