目录
- 前提
- 实践举例
- 定时任务执行时间设置详解
- 定时器包含的子表达式和对应子表达式允许的值
- 子表达式中特殊字符含义的解释和相应示例
前提
一般在处理业务过程中,都需要在特定的时间点执行特定的任务,尤其是业务复杂且执行时间很长,业务之间关联性强的时候,定时任务执行时间的设置显得更为重要。
实践举例
比如有相关性的两个任务A和B ,A需要在凌晨5点执行,且预估执行时间是5小时,B任务需要在A任务执行数据结果的基础上执行,那么根据既往执行情况,将B任务的执行时间设置在上午11点开始执行,执行2小时完毕。
这里需要注意的要精细掌握任务的执行时间,如果为任务预留的执行时间过短很可能会导致后续任务失败,做无用功。比如随着业务量的增大,A任务将会有原来执行3小时就执行完毕会延长为执行5小时才能执行完毕,这时候就需要运营做密切监控,适当调整任务间执行间隙。
定时任务执行时间设置详解
一般都会有前端页面可视化配置定时任务执行频率,具体设置页面举例如下:
具体调度规则的规范现细列如下:
定时器包含的子表达式和对应子表达式允许的值
{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
(059)(059)(023)(031)(011)(17)(1970-2099)
其中星期中的1到7代表从礼拜一到礼拜日,1=SUN,所以也可以写成大写缩写的形式:SUN,MON,TUE,WED,THU,FRI,SAT。
上述中每个大括号可以认为是一个子表达式。
一个定时器的配置至少有前6个也可能有7个子表达式组成,因为年份是可选的可为空。
子表达式中特殊字符含义的解释和相应示例
*:代表所有可能的值。
?:仅用于天(月)和天(星期)两个表达式,表示不指定值。当其中之一被指定值以后,需要将另一个子表达式设置为?。
L:字符仅被用于天(月)和天(星期)两个子表达式,天(月)表示一个月最后一天,天(星期)表示一个星期最后一天即SAT。
-:表示一个连续区间
/:指定数值的增量,间隔。
,:指定子表达式中具体的值
15 * * * * ? 每15秒钟执行一次
0 0 2 * * ? 每天凌晨2点执行一次
0 49 16 * * ? 每天下午16:49执行一次
0 1,31 * * * ? * 每小时的每1分钟和每31分钟的时候执行一次
0 0 10,16,22 * * ? 每天10点、16点、22点执行一次
0 30 1-6 * * ? 上午1点到6点之间每到30分钟的时候执行一次
0/3 * * * * ? 从第0秒开始,每3秒钟执行一次
0 0/2 * * * ? 每小时的0分0秒开始,每2分钟执行一次
0 0/20 7-10 * * ? 每天7点到10点之间每隔20分钟执行一次
15 12 1 2 1 ? 2009 2009年1月2号1点12分15秒执行
15 12 1 ? 10 SUN 2009 2009年10月每周日1点12分15秒执行