cron表达式介绍

cron表达式的位数

cron表达式有5位 (Linux中的crontab命令中就是5位)、6位、7位之分,不同位数之间以空格分隔

位数 每位的含义
5位:* * * * * 分、时、天、月、周
6位:* * * * * * 秒、分、时、天、月、周
7位:* * * * * * * 秒、分、时、天、月、周、年
在这里插入图片描述

在大部分情况下会省略年这一位,成为6位,再省略秒,就成为5位。
注意:
1:Linux中的crontab表达式只有5位
2:从Spring3.0的版本后,cron表达式只能支持6个字段,也就是不支持年份的表达式

常见的特殊符

*:匹配该域的任意值
-:表示范围

例如:
0 0 9-17 * * * 每天朝九晚五时间内的0分0秒触发

/: 时间间隔,用来指定数值的增量。

a/b表示从a开始每隔时间b,例如:5/10 * * * * * 表示每一分钟的5秒、15秒、25秒… 触发。
在子表达式(分钟)里的“0/15”表示从第0分钟开始,每15分钟。
在子表达式(分钟)里的“3/20”表示从第3分钟开始,每20分钟(它和“3,23,43”)的含义一样

,:枚举值

例如:0 0 9,18 * * ? 在每天9点和下午6点整触发

? 号只能用在日和周域上,但是不能在这两个域上同时使用。你可以认为? 字符是 “我并不关心在该域上是什么值。” 这不同于星号,星号是指示着该域上的每一个值。? 是说不为该域指定值。
不能同时这两个域上指定值的理由是难以解释甚至是难以理解的。基本上,假定同时指定值的话,意义就会变得含混不清了:考虑一下,如果一个表达式在日域上有值11,同时在周域上指定了WED。那么是要 trigger 仅在每个月的11号,且正好又是星期三那天被激发?还是在每个星期三的11号被激发呢?要去除这种不明确性的办法就是不能同时在这两个域上指定值。
只要记住,假如你为这两域的其中一个指定了值,那就必须在另一个字值上放一个 ?。

当2个子表达式其中之一被指定了值以后,为了避免冲突,需要将另一个子表达式的值设为“?”

例子

以5位的cron表达式举例:

0 8 * * * 每一天的8点执行任务
0 0-8 * * * 每一天0-8点每小时执行一次任务
0 0-8/2 * * * 每一天0-8天每2小时执行一次任务
0 0,2 * * * 每一天0点和2点执行一次任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值