1、简介

Cron是一个已经存在很长时间的UNIX工具,它的调度功能非常强大且已得到了验证。

Cron表达式用于配置CronTrigger的实例,CronTrigger是org.quartz.Trigger的一个子类。Cron表达式是由六个或七个子表达式(字段)组成的字符串,用于描述日程(schedule)的各个细节。

2、格式

Cron表达式的字段间用空格分隔,字段可以包含任何允许的值,以及该字段允许的特殊字符的各种组合。字段如下:

字段 是否必需 允许值 允许的特殊字符
秒(Seconds) 0-59 , - * /
分(Minutes) 0-59 , - * /
时(Hours) 0-23 , - * /
日(Day of month) 1-31 , - * ? / L W C
月(Month) 0-11 或 JAN-DEC , - * /
星期(Day of week) 1-7 或 SUN-SAT , - * ? / L C #
年(Year) 空 或者 1970-2099 , - * /

Cron表达式可以是比较简单的,也可以是复杂一点的,例如:

* * * * ? *
0 0/5 14,18,3-39,52 ? JAN,MAR,SEP MON-FRI 2002-2010

3、特殊字符

  • *

用于选择字段中的所有值;例如,minute字段中的*表示每一分钟。

  • ?

?表示没有特殊值;例如:如果希望在每月的10号触发,但不在乎是星期几,那么就可以将day-of-month字段设置为10,而day-of-week字段设置为?

  • -

用于指定范围,例如:hours字段的10-12表示10、11或12.

  • ,

用于指定附加值,例如:day-of-week字段中的MON,WED,FRI表示星期一、星期三和星期五。

  • /

用来指定增量,例如:seconds字段中的0/15表示0、15、30和45秒;seconds字段中的5/15表示5、20、35和50秒;day-of-month中的1/3从每月第一天开始,隔三天触发一次。

  • L

    表示最后的(Last),它在不同的字段中的含义不同。例如:

    • day-of-month中的L表示每月的最后一天;

    • day-of-week字段中的L表示每周的最后一天(SAT);

    • day-of-week字段中的6L表示每月的最后一个星期五;

    • month字段中的L-3表示每月的倒数第三天到最后一天。

  • W

用于指定最接近给定日的工作日(星期一至星期五)。例如:day-of-month字段中的15W表示距离15号最近的工作日,如果15号是星期六,触发器将在14号星期五触发;如果15号是星期天,触发器将在16号星期一触发;如果15号是星期二,那么就是15号星期二触发。如果距离最近的一天是上个月的某一天,那么会取距离接近的本月的那天。

  • #

用于指定每月的第n天;例如:day-of-week字段的6#3表示每月的第三个星期五(day 6 = Friday and #3 = the 3rd one in the month);2#1gei示每月第一个星期一;4#5每月第五个星期三;如果当月没指定的那天则不会触发。

4、样例

  • 0 0 12 * * ?

每天中午12:00触发。

  • 0 15 10 ? * *

每天上午10:15触发,等价的写法:0 15 10 * * ?0 15 10 * * ? *等。

  • 0 15 10 * * ? 2021

2021年每天上午10:15触发。

  • 0 * 14 * * ?

每天下午2:00~2:59每分钟触发。

  • 0 0/5 14,18 * * ?

每天下午2:00~2:55和下午6:00~6:55每隔5分钟触发一次。

  • 0 0-5 14 * * ?

每天下午2:00~2:05每分钟触发。

  • 0 10,44 14 ? 3 WED

三月的每个星期三下午2:10和2:44触发。

  • 0 15 10 ? * MON-FRI

每周一到周五10:15触发。

  • 0 15 10 15 * ?

每月15号上午10:15触发。

  • 0 15 10 L * ?

每月最后一天上午10:15触发。

  • 0 15 10 ? * 6L

每月最后一个星期五上午10:15触发。

  • 0 15 10 L-2 * ?

每月倒数第二天至最后一天上午10:15触发。

  • 0 15 10 ? * 6#3

每月第三个星期五上午10:15触发。

  • 0 0 12 1/5 * ?

从每月的第一天开始,每隔5天中午12:00触发一次。

  • 0 11 11 11 11 ? 2022-2025

2022-2025年每年11月11日上午11:11触发。

5、星期及月份缩写

  • 星期
星期 英文 缩写
星期日 Sunday SUN
星期一 Monday MON
星期二 Tuesday TUE
星期三 Wednesday WED
星期四 Thursday THU
星期五 Friday FRI
星期六 Saturday SAT
  • 月份
月份 英文 缩写
一月 January JAN
二月 February FEB
三月 March MAR
四月 April Apr
五月 May MAY
六月 June JUN
七月 July JUL
八月 August AUG
九月 Septemper SEP
十月 October OCT
十一月 November NOV
十二月 December DEC
参考资料: