Cron表达式是一个强大的字符串,用于在Unix/Linux系统中配置cron job(计划任务)的时间表。然而,在Spring框架(包括Spring Boot)中,Cron表达式也被广泛使用于@Scheduled
注解中,以定义定时任务的执行计划。
Cron表达式由六或七个空格分隔的时间字段组成,分别表示:
- 秒(0-59)(Spring的
@Scheduled
支持秒字段,而传统的Unix/Linux cron作业不支持) - 分(0-59)
- 小时(0-23)
- 日(1-31)
- 月(1-12 或 JAN-DEC)
- 星期(0-7 或 SUN-SAT,其中0和7都代表星期日)
- 年(可选字段,留空或1970-2099)(注意:并非所有的cron实现都支持年字段)
每个字段都可以包含特定的值、范围、列表或通配符(*),来定义任务的执行时间。
示例
0 0 8 * * ?
:每天上午8点触发0 15 10 ? * *
:每天上午10:15触发0 0/5 14 * * ?
:在每天下午2点到2:59期间的每5分钟触发0 0/30 8-10 ? * *
:在每天上午8点、8:30、9点、9:30、10点和10:30触发0 0 8-10 ? * MON-FRI
:仅在工作日(星期一至星期五)的上午8点到10点期间的每小时的开始时刻触发0 0 8 ? * 6L
:在每个月的最后一个星期六的上午8点触发0 0 8-10 ? * L-2
:在每个月的最后两天(即倒数第二天和最后一天)的上午8点到10点期间的每小时的开始时刻触发
注意事项
- 在Spring的
@Scheduled
注解中使用Cron表达式时,不需要考虑系统的时区设置,因为它默认使用Spring容器的时区。 - Cron表达式中的星期字段(第6个字段)中的0和7都代表星期日,这可能会引起混淆。
- 并非所有的cron实现都支持秒字段或年字段。然而,在Spring的
@Scheduled
注解中,秒字段是支持的。 - Cron表达式的解析和调度是由Spring的
TaskScheduler
接口的实现(如ThreadPoolTaskScheduler
)来完成的,因此它提供了比传统Unix/Linux cron作业更灵活和强大的功能。
最后,要记得在Spring Boot应用中使用@EnableScheduling
注解来启用定时任务的支持。