1. 什么是Cron表达式?
Cron表达式是一种用来定义任务调度的时间规则的字符串表达式。它通常用于指定定时任务的执行时间,通过非常精细的时间配置来控制任务的触发。
Cron表达式由5个或者6个空格间隔,组成6个或者7个域。每部分代表特定的时间单位。常见的Cron表达式包括6个部分,从左到右依次表示秒、分钟、小时、日、月、星期,另外还有一种包含年份的7部分的Cron表达式。
2. Cron表达式的结构
字段 | 范围值 | 允许的特殊字符 |
---|---|---|
秒(Seconds) | 0~59的整数 | , - * / 四个字符 |
分(Minutes) | 0~59的整数 | , - * / 四个字符 |
小时(Hours) | 0~23的整数 | , - * / 四个字符 |
日期(DayofMonth) | 1~31的整数(需要考虑实际天数) | ,- * ? / L W C 八个字符 |
月份(Month) | 1~12的整数或者JAN-DEC | , - * / 四个字符 |
星期(DayofWeek) | 1~7的整数或者SUN-SAT | , - * ? / L C # 八个字符 |
年(Year) | 1970~2099 | , - * / 四个字符 |
特殊字符的含义:
特殊字符 | 含义 |
---|---|
* | 表示匹配该域的任意值。如果在Minutes域使用该字符则表示都会每分钟都会触发事件。 |
? | 只能在DayOfMonth和DayOfWeek中使用。它被用来指定“非明确的值”。 |
- | 指定一个范围。如:“10-12”在Hour域意味着“10点、11点、12点”触发事件。 |
, | 指定几个散列值。如:在Minutes域使用10,20,则表示10分和20分的时候各自触发一次事件。 |
/ | 指步长。如:“0/15”在Seconds意思是每分钟的第0秒,第15秒,第30秒和第45秒。“5/15”在Minutes域表示每小时的第5分钟,第20分钟,第35分中和第50分钟。符号“*”在“/”前面(如:*/10)等价于0在“/”前面(如:0/10) |
L | 只能出现在DayOfMonth和DayOfWeek域,但在两个字段中的意思不同,例如DayOfMonth域中表示一个月的最后一天。如果在DayOfWeek域则表示7或者SAT。如果在DayOfWeek域中前面加上数字,它表示一个月的最后一周某天,例如5L就表示一个月的最后一个星期四触发事件。 |
W | 表示有效工作日,只能出现在DayOfMonth域。这个字符用于指定日期的最近工作日。“W”字符指定的最近工作日是不能够跨月份的。字符“W”只能配合一个单独的数值使用,不能够是一个数字段,如:1-15W是错误的。 |
LW | L和W可以在日期域中联合使用,LW表示这个月最后一周的工作日。 |
# | 用于确定每个月第几个星期几,只能出现在DayofMonth域。例如在4#2,表示某月的第二个星期三。即X#Y,表示某月的第Y个星期(X-1)。 |
C | 只能在DayOfMonth域和DayOfWeek域出现。这个字符依靠一个指定的“日历”。也就是说这个表达式的值依赖于相关的“日历”的计算结果,如果没有“日历”关联,则等价于所有包含的“日历”。如:日期域是“5C”表示关联“日历”中第一天,或者这个月开始的第一天的后5天。星期域是“1C”表示关联“日历”中第一天,或者星期的第一天的后1天,也就是周日的后一天(周一) |
3 常用Cron表达式示例
以下是一些常见的Cron表达式示例:
0 0 * * * ?
:每小时的第0分钟0秒执行一次。0 0 9 * * ?
:每天早上9:00执行一次。0 0 9 1 * ?
:每月1号早上9:00执行一次。0 0/20 9 * * ?
:每天早上9:00开始,每20分钟执行一次。0 0 9 ? * 1
:每周一早上9:00执行一次。
4.Cron表达式的应用
在Spring Boot中,Cron表达式常用于配置定时任务,实现定时功能。
4.1 Spring Boot中的定时任务配置
在Spring Boot中,可以通过在配置类中使用@EnableScheduling
注解来开启定时任务功能,并结合@Scheduled
注解来定义任务的执行时间。
@Configuration
@EnableScheduling
public class SaticScheduleTask {
// 或直接指定时间间隔,例如:5秒
@Scheduled(cron = "0/5 * * * * ?")
private void configureTasks() {
// 在此处添加定时任务逻辑
}
}
@Configuration
:标注当前类为配置类,Spring会根据它来生成配置的Bean。@EnableScheduling
:开启Spring的定时任务调度功能。@Scheduled(cron = "0/5 * * * * ?")
:定义了一个Cron表达式的定时任务,每隔5秒执行一次。可以通过修改表达式来自定义任务的触发时间。