我们在做springboot项目时候,经常会用到定时任务,而用到定时任务就一定会涉及到Cron表达式的书写
一、Cron表达式是什么?
Cron:计划任务,是任务在约定的时间执行已经计划好的工作,而Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义
二、Cron表达式的结构
{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)}
字段 | 允许值 | 特殊字符 |
秒 | 0-59 | , - * / |
分 | 0-59 | , - * / |
小时 | 0-23 | , - * / |
日期 | 1-31 | , - * ? / L W C |
月份 | 1-12或 JAN-DEC | , - * / |
星期 | 1-7 或 SUN-SAT | , - * ? / L C # |
年(可不写) | 1970-2099 | , - * / |
三、特殊符号解释
这里只解释星期,其他类似
- " , "
代表指定的星期触发,例如,1,2,5 代表星期天、星期一、星期四触发" - "
- " -"
代表指定范围內触发,如1-3 代表从星期日到星期二(国外星期日算第一天),每隔一天触发一次
- " * "
代表每个星期都触发
- " / "
代表触发步进,"/"前面的值代表初始值("*"等同"1"),后面的值代表偏移量,比如"1/4"或者"*/4"代表从星期天开始触发,每隔4天触发1次;"1-5/2"表达式意味着在[1,5]范围内,每隔2天触发,即星期天、星期二、星期四触发
- " L "
有last,最后的意思,表示星期的最后一天触发(这里是周六),"4L"表示一个月的最后一个星期三触发
- " # "
"#" 代表具体的周数,"#"前面代表星期,"#"后面代表本月第几周,比如"2#2"表示本月第二周的星期一,"5#3"表示本月第三周的星期四,"4L"是"#"的特殊形式
四、常用Cron表达式
要求 | 表达式 |
每隔3秒钟执行一次 | */3 * * * * ? |
每天中午12点执行一次 | 0 0 12 * * ? |
每天上午10:30执行一次 | 0 30 10 ? * * 0 30 10 * * ? 0 30 10 * * ? * |
2022年的每天上午10:30执行一次 | 0 30 10 * * ? 2022 |
每天下午5点到下午5:59每分钟执行一次 | 0 * 17 * * ? |
周一到周五每天上午10:15执行 | 0 15 10 ? * 2-6 |
每天上午8点,下午1点,4点执行一次 | 0 0 8,13,16 * * ? |
每月的第4个星期五上午10:30执行一次 | 0 30 10 ? * 6#4 |
每月的最后一个星期五上午10:30执行一次 | 0 30 10 ? * 6L |
总结
当然,最后也有在线生成工具:在线Cron表达式生成器 (qqe2.com)