0.介绍

欢迎大家关注我的公众号,可以和大家一起交流,进步,收获知识与能力。

微信公众号:杨同学的编程生活

Id:Code-2048

正文:

当我们第一次使用cron时 ,比较难受,一看这个表达式感觉什么也都不会,今天您看到我的博客,可以让您轻松解决这个问题。

cron 表达式是一个字符串,该字符串由 6 个空格分为 7 个域,每一个域代表一个时间含义。通常定义 “年” 的部分可以省略,实际常用的由 前六部分组成

cron表达式格式:{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}

通过了解每个位置的允许的值,以及一些案例,足以让你轻松使用cron表达式

一、corn表达式中运行的字段值


秒 0-59                                           - * / 
分 0-59                                            - * / 
时 0-23                                            - * / 
日 1-31                                            - * / ? L C W 
月 1-12          JAN-DEC                  - * / 
星期 1-7         SUN-SAT                   - * / ? L C # 
年(可选)    1970-2099                  - * / 


二、特殊表示

星期1代表星期日,7代表星期六

要不规定日期,要不规定星期,两者基本上不会同时规定的。


三、每个符号的意义:


*       表示所有值,每个字段规定的值都可选。
?      表示没有说明的值,不关心该字段的值。 
-       表示一个指定的范围,在这个范围内都可触发。 
,       表示附加一个可能值,符号前和符号后是递增的值。
/        符号前表示开始时间,符号后表示每次递增的值,表示从符号前时间开始,每隔多长时间触发一次。
L       表示最后的意思,如果用到月份,表示 "这个月最后一天";如果用到星期,表示“表示星期六”。 如果在
星期中和数字联合使用,它的意思就是 "这个月的最后一个星期几" ,例如: "6L" 表示“这个月的最后一个星期五"。
W      只能用
日期字段。用来描叙最接近指定天的工作日(周一到周五)。例如:在日期字段用“15W”指“最接近这个 月第15天的工作日”,即如果这个月第15天是周六,那么触发器将会在这个月第14天即周五触发;如果这个月第15天是周日,那么触发器将会在这个月第 16天即周一触发;如果这个月第15天是周一,那么就在触发器这天触发。而"LW" 表示这个月的最后一天工作日。
#       只能用在
星期字段,符合前面数字表示周几,后面数字表示第几个。用来指定这个月的第几个星期几。例:在星期字段中用"6#3"指这个月第3个周五(6指周五,3指第3个)。如果指定的日期不存在,触发器就不会触发。 
C      指和calendar联系后计算过的值。例:在日期字段中用“5C”指在这个月第5天或之后包括calendar的第一天;在星期字段用“1C”指在这周日或之后包括calendar的第一天。


四、一些cron表达式案例

要不规定日期,要不规定星期,两者基本上不会同时规定的。


*/5 * * * * ?                         每隔5秒执行一次
 0 */1 * * * ?                       每隔1分钟执行一次
 0 0 5-15 * * ?                    每天5-15点整点触发
 0 0/3 * * * ?                       每三分钟触发一次
 0 0-5 14 * * ?                    在每天下午2点到下午2:05期间的每1分钟触发 
 0 0/5 14 * * ?                    在每天下午2点到下午2:55期间的每5分钟触发
 0 0/5 14,18 * * ?               在每天下午2点到2:55期间和下午6点到6:55期间的每5分钟触发
 0 0/30 9-17 * * ?               朝九晚五工作时间内每半小时
 0 0 10,14,16 * * ?             每天上午10点,下午2点,4点 
 
 0 0 12 ? * WED                              表示每个星期三中午12点
 0 0 17 ? * TUES,THUR,SAT          每周二、四、六下午五点
 0 10,44 14 ? 3 WED                      每年三月的星期三的下午2:10和2:44触发 
 0 15 10 ? * MON-FRI                     周一至周五的上午10:15触发
 0 0 23 L * ?                                    每月最后一天23点执行一次
 0 15 10 L * ?                                  每月最后一日的上午10:15触发 
 0 15 10 ? * 6L                                每月的最后一个星期五上午10:15触发 
 0 15 10 * * ? 2005                         2005年的每天上午10:15触发 
 0 15 10 ? * 6L 2002-2005             2002年至2005年的每月的最后一个星期五上午10:15触发 
 0 15 10 ? * 6#3                             每月的第三个星期五上午10:15触发


30 * * * * ?                            每半分钟触发任务
30 10 * * * ?                         每小时的10分30秒触发任务
30 10 1 * * ?                          每天1点10分30秒触发任务
30 10 1 20 * ?                        每月20号1点10分30秒触发任务
30 10 1 20 10 ? *                   每年10月20号1点10分30秒触发任务
30 10 1 20 10 ? 2011             2011年10月20号1点10分30秒触发任务
30 10 1 ? 10 * 2011                2011年10月每天1点10分30秒触发任务
30 10 1 ? 10 SUN 2011          2011年10月每周日1点10分30秒触发任务
15,30,45 * * * * ?                     每15秒,30秒,45秒时触发任务
15-45 * * * * ?                          15到45秒内,每秒都触发任务
15/5 * * * * ?                              每分钟的每15秒开始触发,每隔5秒触发一次
15-30/5 * * * * ?                         每分钟的15秒到30秒之间开始触发,每隔5秒触发一次
0 0/3 * * * ?                                 每小时的第0分0秒开始,每三分钟触发一次
0 15 10 ? * MON-FRI                 星期一到星期五的10点15分0秒触发任务
0 15 10 L * ?                               每个月最后一天的10点15分0秒触发任务

"0 15 10 LW * ?                           每个月最后一个工作日的10点15分0秒触发任务
0 15 10 ? * 5L                            每个月最后一个星期四的10点15分0秒触发任务
0 15 10 ? * 5#3                            每个月第三周的星期四的10点15分0秒触发任务

0 0 15 1 10 * 1949          1949年10月1日下午3点

0 30 */2 * * ?                    每2小时第30分0秒执行

1,3,5 0 1-5  L  *  ?               每个月最后一天的1到5点,然后这几个点内的每个0分1秒,0分3秒,0分5秒各执行一次。

五、cron 表达式用途

corn表达式最主要的用途就是在程序中做一些定时任务,如年度报表、缓存统计报告等,由于这些数据量实时统计非常消耗程序性能,所以就每隔一段时间,通过自动任务跑一次,这样可以极大的提升用户浏览体验。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐