news 2026/2/23 19:12:09

Cron表达式

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cron表达式

前言

在日常开发工作中,定时任务是一个非常常见的需求。无论是数据同步、报表生成,还是系统维护,都需要用到定时任务调度。而Cron表达式作为定时任务调度的核心配置语法,是每个开发者都必须掌握的技能。本文将从基础语法出发,带你全面掌握Cron表达式的使用。


一、Cron表达式基础解析

1.1 什么是Cron表达式

Cron表达式是一种用于配置定时任务的字符串表达式,最初诞生于Unix系统,现已广泛应用于各种调度框架中(如Spring Task、Quartz等)。它通过简洁的语法描述复杂的时间规则。

1.2 字段定义

标准的Cron表达式由6个或7个时间字段组成,字段之间用空格分隔:

秒 分 时 日 月 周 [年]
字段取值范围允许的特殊字符必填
0-59, - * /
0-59, - * /
0-23, - * /
1-31, - * / ? L W
1-12 或 JAN-DEC, - * /
1-7 或 SUN-SAT, - * / ? L #
1970-2099, - * /

注意:“日"和"周"字段互斥,必须有一个使用”?"占位符。

1.3 特殊字符详解

字符含义示例说明
*所有值* * * * *每秒执行
,列表值1,3,5 * * * *第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表达式,按场景分类:

2.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.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 * * ?

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

2.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

2.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 ?

2.6 复杂时间组合

# 每月1日和15日的凌晨2点执行 0 0 2 1,15 * ? # 工作日的每天上午9点到下午18点,每小时执行一次 0 0 9-18 ? * 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 * ?

三、示例解析与注意事项

3.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=周二)

3.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、15...秒执行 5/5 * * * * ? # 第5、10、15、20...秒执行

陷阱3:超出范围的日期

0 0 0 31 * ? # 2月31日不存在,不会执行

最佳实践

  • 使用L字符表示最后一天,避免日期不存在的问题
  • 对于跨月任务,考虑业务逻辑处理

陷阱4:时区问题

0 0 8 * * ? # 服务器时间上午8点,不一定是北京时间

最佳实践

  • 明确指定时区(如使用@Scheduledzone参数)
  • 统一使用UTC时间或服务器本地时间
  • 在任务文档中注明时区

陷阱5:系统时钟变更

  • 问题:服务器时钟调整(如NTP同步)可能导致任务重复执行或跳过
  • 解决方案:重要任务应结合分布式锁和数据库记录

最佳实践清单

  1. 明确业务需求

    • 任务执行频率是否合理?
    • 高频任务是否会造成性能压力?
  2. 添加任务日志

    • 记录任务开始时间、结束时间、执行结果
    • 便于排查问题和监控
  3. 异常处理

    • 任务执行失败时的重试机制
    • 异常告警通知
  4. 分布式环境考虑

    • 使用分布式锁避免重复执行
    • 考虑任务分片处理
  5. 文档化

    • 记录每个Cron表达式的用途和业务含义
    • 便于后续维护

四、实用工具推荐

4.1 Cron表达式在线工具

1. CronTab Guru

网址:https://crontab.guru/
特点

  • 简洁直观的界面
  • 实时解析Cron表达式
  • 提供常用示例库
  • 显示下次执行时间

适用场景:快速验证和生成基础Cron表达式

2. Cron表达式生成器

网址:https://www.bejson.com/othertools/cron/
特点

  • 中文界面
  • 可视化配置选项
  • 支持生成7字段表达式
  • 提供执行时间预览

适用场景:需要精确配置复杂时间规则

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/21 6:32:47

实现Altium许可证精细化管理的五个阶段

实现Altium许可证精细化管理的五个阶段 ——助力企业实现高效、合规的EDA资源分配在电子设计自动化(EDA)领域,Altium Designer作为一款广受欢迎的PCB设计软件,其许可证管理复杂度企业规模的扩大而不断提升。是在多项目、多团队协作…

作者头像 李华
网站建设 2026/2/10 19:36:42

数字孪生如何推动水利行业迈向智能化?

数字孪生技术为水利行业提供了一种将物理世界与数字世界深度融合的新思路,通过构建“可感知、可分析、可推演”的数字水利体系,推动水利管理迈向智能化。正巧现在有许多非常优秀的数字孪生软件,可以让我们轻松实现数字孪生技术与水利的融合。…

作者头像 李华
网站建设 2026/2/19 6:17:05

RAGFlow 本地部署全攻略:10 分钟构建专业级 AI 知识库

RAGFlow 作为一款开源检索增强生成引擎,凭借其深度文档理解能力和灵活配置性,已成为企业及个人构建 AI 知识库的热门工具。本文将手把手教你完成 RAGFlow 的本地部署,解决端口冲突、镜像拉取慢等常见问题,助你快速搭建私有化 AI 知…

作者头像 李华
网站建设 2026/2/18 18:40:28

基于STM32单片机电子项圈 宠物防丢定位 电子围栏

目录 硬件设计软件实现功能扩展注意事项 源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 硬件设计 STM32单片机选型:推荐使用STM32F1或STM32F4系列,具备低功耗模式(如STM32L4系列)以延长…

作者头像 李华
网站建设 2026/2/21 14:34:35

基于STM32单片机老人防丢 跌倒报警

目录STM32单片机老人防丢与跌倒报警系统概述系统核心功能硬件组成软件设计要点扩展功能应用场景注意事项源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!STM32单片机老人防丢与跌倒报警系统概述 该系统基于STM32单片机设计,…

作者头像 李华
网站建设 2026/2/11 12:36:30

爆肝整理,性能测试-内存问题定位分析+常见业务场景bug(汇总)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、性能测试-内存…

作者头像 李华