Cron表达式使用
Cron表达式是一种用于指定定时任务的时间表达式,常用来指定任务的执行时间、执行频率和执行间隔。它由6个字段组成,分别表示秒、分、时、日期、月份、星期。
域取值
域 |
允许的数值 |
允许的特殊字符 |
备注 |
---|---|---|---|
秒 |
0~59 |
不支持 |
无 |
分 |
0~59 |
* / |
任务的执行间隔大于30分钟 |
小时 |
0~23 |
- * / |
无 |
日期 |
1~31 |
- * ? / L |
无 |
月份 |
1~12 |
JAN-DEC - * / |
无 |
星期 |
1~7 |
SUN-SAT - * ? / L |
1 表示星期天,2 表示星期一,依次类推 |
特殊字符含义
字符 |
含义 |
示例 |
---|---|---|
* |
表示匹配域的任意值 |
在分这个域使用 *,即表示每分钟都会触发事件。 |
? |
表示匹配域的任意值,但只能用在日期和星期两个域,因为这两个域会相互影响。 |
要在每月的 20 号触发调度,不管每个月的 20 号是星期几,则只能使用如下写法:13 13 15 20 * ?。其中,因为日期域已经指定了 20 号,最后一位星期域只能用 ?,不能使用 *。如果最后一位使用 *,则表示不管星期几都会触发,与日期域的 20 号相斥,此时表达式不正确。 |
- |
表示起止范围 |
在小时这个域使用 8-10,表示从 8时到 10 时每小时触发一次。 |
/ |
表示起始时间开始触发,然后每隔固定时间触发一次 |
在小时这个域中使用,“*/3”等同于“每3个小时”,即“0,3,6,9,12,15,18,21”小时触发。 |
L |
表示最后,只能出现在日和星期两个域 |
在星期这个域使用 5L,意味着在最后的一个星期四触发。 |
示例
0 15 10 ? * * 每天上午10:15执行任务;
0 0 10,14,16 * * ? 每天上午10:00点、下午14:00以及下午16:00执行任务;
0 40 9-17 * * ? 每天上午09:00到下午17:00时间段内每小时的第40分钟执行任务;
0 0/30 10-16 ? * 2 每周一上午10点到下午16点每30分钟执行;