Quartz Cron 表达式有哪些参数和用法?

摘要:目录 基础语法 字段说明 特殊字符说明 常用时间表达式 业务场景案例 复杂表达式示例 注意事项 在线工具 基础语法 Quartz Cron表达式由6个字段组成(从左到右): 秒 分钟 小时 日期 月份 星期 * * * * * * 字段范围
目录 基础语法 字段说明 特殊字符说明 常用时间表达式 业务场景案例 复杂表达式示例 注意事项 在线工具 基础语法 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表达式生成器 Cron Expression Generator Quartz Cron Expression Cron Expression Descriptor 表达式验证工具 Cron Expression Validator Quartz Scheduler Trigger 常见问题 FAQ Q: 为什么我的任务没有按预期执行? A: 检查以下几点: 确认服务器时区设置 验证Cron表达式语法 检查任务是否被阻塞 确认调度器是否正常运行 Q: 如何处理跨月份的特殊情况? A: 使用L、W等特殊字符: # 每月最后一天 0 0 12 L * ? # 每月最后一个工作日 0 0 12 LW * ? Q: 能否在一个表达式中同时指定多个复杂条件? A: 不建议在单个表达式中使用过于复杂的逻辑,建议: 拆分为多个简单的Cron表达式 在业务逻辑中处理复杂条件 使用编程方式动态调度