cron表达式在指定定时任务时具有非常强的灵活性,可以满足日常遇到的各种定时规则。但是其规则设置起来还是有一定的难度,特别是不经常使用的时候,更容易忘记写法。通过图形化的方式进行配置,并且可以生成规则,列出定时的时间点,就直观了很多。
以下以几个常见场景进行说明:
1. 周一到周五指定时分秒执行
cron表达式:
5 25 9 ? * 2,3,4,5,6
从生成的表达式5 25 9 ? * 2,3,4,5,6 ,可以看出,对时分秒,都是直接给出时间值5 25 9,对于日期,没有限制,则使用?代替,对于月是所有的月份,用*表示,周内的日期,采用对应的序号分别指定,并且用逗号分隔,2,3,4,5,6表示周一到周五。
根据系统当前时间,执行指定的规则,可以获得满足条件的后续8个时间点:
2022-03-30 09:25:05
2022-03-31 09:25:05
2022-04-01 09:25:05
2022-04-04 09:25:05
2022-04-05 09:25:05
2022-04-06 09:25:05
2022-04-07 09:25:05
2022-04-08 09:25:05
除了上述的形式外,还可以采用如下的形式:
0 15 10 ? * MON-FRI
通过运行,可以看到执行时间点:
2022-03-30 10:15:00
2022-03-31 10:15:00
2022-04-01 10:15:00
2022-04-04 10:15:00
2022-04-05 10:15:00
2022-04-06 10:15:00
2022-04-07 10:15:00
2022-04-08 10:15:00
2. 规则说明
1. 日和周不能同时指定,未指定的那个用?表示;
2. 用/表示每间隔一定时间执行一次,比如0/2在分钟位置,就表示每2分钟执行一次;
3. 用-表示连续区间,比如0-5在分钟位置,表示0到5分之间,每分钟执行一次;
4. 用,表示间隙区间,比如2,3,4,5,6在周的位置,表示周一到周五;
5. 用*表示所有单位,比如*在月的位置,表示不限定月;
6. 单位顺序为:秒 分 时 日 月 周 年,年没有限制,可以不指定,此时就是6个字段。
3. 常用表达式
(1)0/2 * * * * ? 表示每2秒 执行任务
(2)0 0/2 * * * ? 表示每2分钟 执行任务
(3)0 0 2 1 * ? 表示在每月的1日的凌晨2点调整任务
(4)0 15 10 ? * MON-FRI 表示周一到周五每天上午10:15执行作业
(5)0 15 10 ? 6L 2002-2006 表示2002-2006年的每个月的最后一个星期五上午10:15执行作
(6)0 0 10,14,16 * * ? 每天上午10点,下午2点,4点
(7)0 0/30 9-17 * * ? 朝九晚五工作时间内每半小时
(8)0 0 12 ? * WED 表示每个星期三中午12点
(9)0 0 12 * * ? 每天中午12点触发
(10)0 15 10 ? * * 每天上午10:15触发
(11)0 15 10 * * ? 每天上午10:15触发
(12)0 15 10 * * ? 每天上午10:15触发
(13)0 15 10 * * ? 2005 2005年的每天上午10:15触发
(14)0 * 14 * * ? 在每天下午2点到下午2:59期间的每1分钟触发
(15)0 0/5 14 * * ? 在每天下午2点到下午2:55期间的每5分钟触发
(16)0 0/5 14,18 * * ? 在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
(17)0 0-5 14 * * ? 在每天下午2点到下午2:05期间的每1分钟触发
(18)0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
(19)0 15 10 ? * MON-FRI 周一至周五的上午10:15触发
(20)0 15 10 15 * ? 每月15日上午10:15触发
(21)0 15 10 L * ? 每月最后一日的上午10:15触发
(22)0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
(23)0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
(24)0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发