核心内容摘要
91浏览器免费版官方版:不止于快,更是你数字生活的全能管家!
前言在日常开发工作中定时任务是一个非常常见的需求。
无论是数据同步、报表生成还是系统维护都需要用到定时任务调度。
而Cron表达式作为定时任务调度的核心配置语法是每个开发者都必须掌握的技能。
本文将从基础语法出发带你全面掌握Cron表达式的使用。
Cron表达式基础解析
1 什么是Cron表达式Cron表达式是一种用于配置定时任务的字符串表达式最初诞生于Unix系统现已广泛应用于各种调度框架中如Spring Task、Quartz等。
它通过简洁的语法描述复杂的时间规则。
2 字段定义标准的Cron表达式由6个或7个时间字段组成字段之间用空格分隔秒 分 时 日 月 周 [年]字段取值范围允许的特殊字符必填秒
, - * /是分
, - * /是时
, - * /是日
, - * / ? L W是月
或 JAN-DEC, - * /是周
或 SUN-SAT, - * / ? L #是年
, - * /否注意“日和周字段互斥必须有一个使用”?占位符。
3 特殊字符详解字符含义示例说明*所有值* * * * *每秒执行,列表值1,3,5 * * * *第
1、
5秒执行-范围值
* * * *第1到第5秒执行/间隔值0/5 * * * *每5秒执行从第0秒开始?不指定值0 0 12 * * ?每天12点执行不指定周几L最后0 0 12 L * ?每月最后一天12点执行W最近工作日0 0 12 15W * ?每月15日最近工作日12点执行#第几个0 0 12 ? * 5#2每月第2个周五12点执行
项目常用Cron示例集下面整理了30个企业级项目中常用的Cron表达式按场景分类
1 按频率执行# 每5秒执行一次 0/5 * * * * ? # 每30秒执行一次 0/30 * * * * ? # 每分钟执行一次 0 * * * * ? # 每5分钟执行一次 0 */5 * * * ? # 每15分钟执行一次 0 */15 * * * ? # 每30分钟执行一次 0 */30 * * * ? # 每小时执行一次 0 0 * * * ? # 每2小时执行一次 0 0 */2 * * ? # 每6小时执行一次 0 0 */6 * * ?
2 每日固定时间执行# 每天凌晨0点执行 0 0 0 * * ? # 每天上午8点执行 0 0 8 * * ? # 每天中午12点执行 0 0 12 * * ? # 每天下午18点执行 0 0 18 * * ? # 每天晚上23点59分执行 0 59 23 * * ? # 每天凌晨2点30分执行 0 30 2 * * ?
3 工作日/周末执行# 工作日周一到周五上午9点执行 0 0 9 ? * MON-FRI # 工作日每天上午9点和下午18点执行 0 0 9,18 ? * MON-FRI # 周末周
周日上午10点执行 0 0 10 ? * SAT,SUN # 周一上午9点执行 0 0 9 ? * MON # 周五下午17点执行 0 0 17 ? * FRI
4 每周固定时间执行# 每周一上午8点执行 0 0 8 ? * MON # 每周二下午14点执行 0 0 14 ? * TUE # 每周三上午10点执行 0 0 10 ? * WED # 每周日凌晨1点执行备份任务 0 0 1 ? * SUN # 每周五晚上23点执行 0 0 23 ? * FRI
5 每月特定日期执行# 每月1日凌晨0点执行 0 0 0 1 * ? # 每月15日上午10点执行 0 0 10 15 * ? # 每月1日和15日执行 0 0 0 1,15 * ? # 每月最后一天执行 0 0 0 L * ? # 每月最后一天上午10点执行 0 0 10 L * ? # 每季度第一天执行1月、4月、7月、10月1日 0 0 0 1 1,4,7,10 ?
6 复杂时间组合# 每月1日和15日的凌晨2点执行 0 0 2 1,15 * ? # 工作日的每天上午9点到下午18点每小时执行一次 0 0
? * MON-FRI # 每周
一、
五的上午8点30分执行 0 30 8 ? * MON,WED,FRI # 每月第2个周五上午10点执行 0 0 10 ? * 5#2 # 每月最后一个周五执行 0 0 0 ? * 6L # 每月15日最近工作日执行如果15日是周六则14日执行如果15日是周日则16日执行 0 0 10 15W * ?
示例解析与
注意事项
1 典型示例详解示例1每日凌晨数据备份0 0 2 * * ?含义每天凌晨2点执行使用场景数据库全量备份、日志归档说明选择凌晨2点是因为系统负载较低示例2工作日报表生成0 0 8 ? * MON-FRI含义工作日周一到周五上午8点执行使用场景生成前一天的业务报表说明避开周末确保工作日上班前完成示例3每月账单结算0 0 0 1 * ?含义每月1日0点执行使用场景月度账单结算、统计归档说明月初执行便于数据统计示例4每15分钟健康检查0 */15 * * * ?含义每15分钟执行一次使用场景服务健康检查、心跳检测说明高频检测但不过于频繁示例5每月第2个周二发送提醒0 0 10 ? * 2#2含义每月第2个周二上午10点使用场景定期会议提醒、月度报告通知说明2#2表示第2个周二2周二
2 常见陷阱与最佳实践陷阱1日和周字段冲突❌错误示例0 0 12 1 * MON # 同时指定了1号和周一✅正确示例0 0 12 1 * ? # 每月1日不指定周 0 0 12 ? * MON # 每周一不指定日期说明日和周字段互斥必须有一个使用?。
陷阱2间隔值的起始点❌错误理解*/5意味着从第5个单位开始✅正确理解*/5意味着从第0个单位开始每隔5个单位0/5 * * * * ? # 第
0、
5、
10、
..秒执行 5/5 * * * * ? # 第
5、
10、
15、