corn表达式

发布时间 2023-06-28 11:05:10作者: joudys

corn表达式作用:

在使用定时调度任务的时候,最常用的就是corn表达式,通过corn表达式指定任务在某个时间点或周期的执行。

corn表达式配置方便简洁,无论是Spring的@Scheduled还是Quartz框架,都支持cron表达式。

corn表达式结构:

Corn表达式是一个字符串,分为6个或7个字段,其中前六个字段为必选,第七个字段为可选。每个字段之间用空格进行分隔,corn表达式对英文大小写不敏感。

Corn表达式有如下两种语法格式:

  1. Seconds Minutes Hours Day Month Week Year
  2. Seconds Minutes Hours Day Month Week

Corn每个字段的含义:

从左到右(用空格分开): 小时 月份中的日期 月份 星期中的日期 年份

位置 时间域(en) 时间域(ch) 允许值范围 允许特殊字符
1 Seconds 0-59 , - * /
2 Minutes 分钟 0-59 , - * /
3 Hours 小时 0-23 , - * /
4 Day 1-31 , - * / L W C
5 Month 1-12 , - * /
6 Week 星期 1-7(1:星期天,6:星期六) , - * ? / L C #
7 Year 年(可选) 1970-2099 , - * /

常用字符含义:

  • 【*】:每的意思。在不同的字段上,就代表每秒,每分,每小时等。
  • 【-】:指定值的范围。比如[1-10],在秒字段里就是每分钟的第1到10秒,在分就是每小时的第1到10分钟,以此类推。
  • 【,】:指定某几个值。比如[2,4,5],在秒字段里就是每分钟的第2,第4,第5秒,以此类推。
  • 【/】:指定值的起始和增加幅度。比如[3/5],在秒字段就是每分钟的第3秒开始,每隔5秒生效一次,也就是第3秒、8秒、13秒,以此类推。
  • 【?】:仅用于【日】和【周】字段。因为在指定某日和周几的时候,这两个值实际上是冲突的,所以需要用【?】标识不生效的字段。比如【0 1 * * * ?】就代表每年每月每日每小时的1分0秒触发任务。这里的周就没有效果了。

极少用字符含义:

  • SUN:仅用于【周】字段,表示星期日。也可以用数字1设置。周日到周六分别为SUN,MON,TUE,WED,THU,FRI和SAT,对应数字1,2,3,4,5,6,7。目前Quartz支持。

  • L:即last,用于【日】【周】字段。这里需要注意的是,在不同的字段的不同使用方式,其含义有所差别。

    • 用于日字段:直接使用L代表每个月的最后一天。也支持偏移量的方式,配置[L-1]则代表每月的倒数第二天。
    • 用于周字段:直接使用L代表每周的最后一天,也就是等效于[7]或[SAT],但是如果配合上数字,比如[7L],则代表每个月最后一个周六,等效于[SATL]。目前Quartz支持。

corn表达式实例:

*/2 * * * * ? 或 0/2 * * * * ? :每两秒执行一次

0 0 1 1 * ? * :每月的1日的凌晨1点执行

0 0 9,12,17 * * ? :每天上午9点,下午12点,17点执行

0 10 12 * * ? 或 0 10 12 ? * * 或 0 10 12 * * ? *:每天上午12:10执行

0 30 1 L * ? :每月最后一日的凌晨1:30执行

0 0 12 ? * WED :每周三中午12点执行

本文参考:

  1. 简洁明了看懂cron表达式 - 知乎 (zhihu.com)
  2. http://t.csdn.cn/PJwiD