Cron表达式简介
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 |