插件窝 干货文章 定时任务配置表达式是什么 定时任务配置表达式怎么写教程

定时任务配置表达式是什么 定时任务配置表达式怎么写教程

触发 字段 表达式 表示 453    来源:    2025-05-12

定时任务配置表达式(通常称为 Cron 表达式)是一种用于定义任务执行时间的字符串格式,广泛应用于 Linux 的 cron 服务、Java 的 Quartz、Spring 的 @Scheduled 等场景。以下是详细教程:


1. Cron 表达式结构

一个标准的 Cron 表达式由 6或7个字段 组成(不同工具可能略有差异),分别表示秒、分、时、日、月、周(和年)。格式如下:

┌───────────── 秒(0-59)
│ ┌─────────── 分(0-59)
│ │ ┌───────── 时(0-23)
│ │ │ ┌─────── 日(1-31)
│ │ │ │ ┌───── 月(1-12 或 JAN-DEC)
│ │ │ │ │ ┌─── 周(0-7,0和7均为周日,或 SUN-SAT)
│ │ │ │ │ │
│ │ │ │ │ │
* * * * * * [年](可选)

2. 字段说明与特殊字符

字段 允许值 特殊字符 说明
0-59 , - * / Linux cron 通常省略秒字段
0-59 , - * /
0-23 , - * /
1-31 , - * / ? L W L 表示最后一天,W 工作日
1-12 或 JAN-DEC , - * /
0-7 或 SUN-SAT , - * / ? L # # 表示第几个周几(如 6#3 第三个周五)
年(可选) 1970-2099 , - * / 通常省略

特殊字符含义: - *:任意值(如 * 在分钟字段表示每分钟) - ,:多个值(如 MON,WED,FRI) - -:范围(如 10-20 在日字段表示10日到20日) - /:步长(如 0/15 在秒字段表示每15秒) - ?:不指定(仅用于日或周字段,避免冲突) - L:最后(如 L 在日字段表示月末) - W:最近工作日(如 15W 表示当月15日最近的工作日)


3. 常见示例

表达式 说明
0 * * * * ? 每分钟的0秒触发
0 0/5 * * * ? 每5分钟触发一次
0 0 12 * * ? 每天中午12点触发
0 15 10 ? * MON-FRI 每周一到周五的10:15触发
0 0 8 1 * ? 每月1日8:00触发
0 0 6 L * ? 每月最后一天的6:00触发
0 0 12 ? * 6#3 每月第三个周五中午12:00触发
0 0 0 31 12 ? 每年12月31日午夜触发

4. 工具与验证

  • 在线生成器
  • 代码中配置
    • Spring Boot
      java @Scheduled(cron = "0 0 8 * * ?") // 每天8点执行 public void task() { /* ... */ }
    • Linux Crontab
      bash # 每天凌晨3点执行脚本 0 3 * * * /path/to/script.sh

5. 注意事项

  1. 日与周的冲突
    若同时指定了日和周,部分框架(如 Quartz)会视为“或”关系(满足任一条件即触发)。
  2. 时区问题
    确保服务器时区与表达式时区一致(如 spring.task.scheduling.timezone=Asia/Shanghai)。
  3. 特殊月份/周处理
    例如,2月30日每周一和每月1日 需避免逻辑矛盾。

通过以上规则,你可以灵活配置各种定时任务。如果有具体场景需求,可以进一步优化表达式!