上一章节地址Quartz(02) 两种Trigger(SimpleTrigger/CronTrigger)
cron 在Quartz中的作用就是指定任务运行的频率,或是任务执行的时间表.举个例子我们想要一个任务在每天晚上凌晨执行一次,那么对应的cron 表达式就是 0 0 00 * * ?
Quartz Cron 表达式支持7个域 ,分别是秒/分/时/日/月/周/年.期中年是非必须项.如下图
名称 | 是否必须 | 允许值 | 特殊字符 |
---|---|---|---|
秒 | 是 | 0-59 | , - * / |
分 | 是 | 0-59 | , - * / |
时 | 是 | 0-23 | , - * / |
日 | 是 | 1-31 | , - * ? / L W C |
月 | 是 | 1-12 或 JAN-DEC | , - * / |
周 | 是 | 1-7 或 SUN-SAT | , - * ? / L C # |
年 | 否 | 空 或 1970-2099 | , - * / |
注意在cron表达式中不区分大小写.
乍一看上表可能不能明白是什么意思,下面我们通过例子来解释这些特殊字符的含义.
1. * 星号
*号通配这个域上所有的合法的值.如果在秒上,每秒执行,在分钟上,每分钟执行.
例 : * * * * ? * 意义: 每一秒执行一次
* 01 12 2 1 ? 意义: 1月2日12:01:00到12:01:59 每秒执行一次
0 * 17 * * ? 意义: 每天17:00点到17:59之间,每分钟执行一次.
2. ? 问号
? 号只能用在日和周上,而且不能在这两个域上同时使用。 ? 并不关心这个域上是什么值. 日和周上必须一个是?,一个不是?.为什么呢?假定同时指定值的话,意义就会变得含混不清了. 考虑一下,如果一个表达式在日域上有值12,同时在周域上指定了 FRI。那么是要仅在每个月的12号,且正好又是星期三那天被激发?还是在每个星期三的11号被激发呢?要去除这种不明确性的办法就是不能同时在这两个域上指定值。只要记住,假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个 ?。
例: 0 08 12 ? 4 WEB 意义: 4月的每个星期三的12 : 08 触发
0 08 12 22 4 ? 意义: 4月的22日12 : 08 触发
3. , 逗号
,用来给某个域上指定一个值列表的
例 : 0 0,30 12 * * ? 意义: 每天12:00,12:30触发
0 0,15,30,45 * * * ? 意义: 每隔15分钟触发一次
4. / 斜杠
斜杠 (/) 是用于时间表的递增的.
例 : 0 0/15 * * * ? 意义: 每隔15分钟触发一次
0/30 00 * * * ? 意义: 每隔30秒触发一次
5. - 中划线
中划线 (-) 用于指定一个范围.作用在时域上时 , 2-14表示两点到14点.
例: 0 00 2-14 ? * * 意义: 2:00 到14:00每小时执行执行一次
0 0-5 2 ? * * 意义: 2:00 到2:05 每分钟执行一次
6. L
L 说明了某域上允许的最后一个值。它仅被日和周域支持. 在日上表示,表示指定月的最后一天.当月域上指定了 JAN 时,在日域上的 L 会在1月31号被触发。假如月域上是 SEP,那么 L 会预示着在9月30号触发。换句话例: 0 0 8 L * ? 意义: 在每个月最后一天的上午 8:00 触发 。在月域上的 * 说明是 每个月. 当 L 字母用于周域上,指示着周的最后一天,就是星期六 (或者数字7).例: 0 00 8 ? * L 意义: 每个月的最后一个星期六下午的 11:59 触发.当使用于周域上,你可以用一个数字与 L 连起来表示月份的最后一个星期 X.
例: 0 0 00 ? * 3L 说的是在每个月的最后一个星期二凌晨触发.
注:不允许你用一个范围值和列表值与 L 连用。这会产生不可预知的结果
W 字母
W 字符代表着平日 (Mon-Fri),并且仅能用于日域中. 它用来指定离指定日的最近的一个平日. 大部分的商业处理都是基于工作周的,所以 W 字符可能是非常重要的. 例如,日域中的 15W 意味着 “离该月15号的最近一个平日. ” 假如15号是星期六,那么 trigger 会在14号(星期四)触发,因为距15号最近的是星期一,这个例子中也会是17号(不会在17号触发的,如果是15W,可能会是在14号(15号是星期六)或者15号(15号是星期天)触发,也就是只能出现在邻近的一天,如果15号当天为平日直接就会当日执行)。W 只能用在指定的日域为单天,不能是范围或列表值.
“#”字符仅能用于周域中。它用于指定月份中的第几周的哪一天. 例如,如果你指定周域的值为 6#3,它意思是某月的第三个周五 (6=星期五,#3意味着月份中的第三周). 另一个例子 2#1 意思是某月的第一个星期一 (2=星期一,#1意味着月份中的第一周). 注意,假如你指定 #5,然而月份中没有第 5 周,那么该月不会触发.
以上就是Quartz cron 表达式说明.本文参考了”Quartz Job Scheduling Framework”
下一章节Quartz(04) Quartz 基本配置
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/china_shrimp/article/details/52132213
内容来源于网络,如有侵权,请联系作者删除!