cron表达式在指定定时任务时具有非常强的灵活性,可以满足日常遇到的各种定时规则。但是其规则设置起来还是有一定的难度,特别是不经常使用的时候,更容易忘记写法。通过图形化的方式进行配置,并且可以生成规则,列出定时的时间点,就直观了很多。

以下以几个常见场景进行说明:

1. 周一到周五指定时分秒执行

java 验证cron表达式是否有效 cron表达式校验工具_java 验证cron表达式是否有效

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触发