@Scheduled 的详细解析
参数详解
-
cron: 使用Cron表达式来指定复杂的调度模式。Cron表达式的格式如下:
- 秒(0-59)
- 分钟(0-59)
- 小时(0-23)
- 日(1-31)
- 月(1-12 或 JAN-DEC)
- 星期(0-7 或 SUN-SAT,其中0和7都表示星期日)
- 年(可选,1970-2099)
Cron表达式的每个字段可以是具体的值、范围、列表或通配符(*)。例如:
"0 0 12 * * ?"
表示每天中午12点。"0 15 10 ? * MON-FRI"
表示周一至周五上午10:15执行。"0 0/5 * * * ?"
表示每5分钟执行一次。"0 0 12 1 * ?"
表示每月第一天中午12点执行。
-
fixedRate: 指定以固定的速率重复执行任务,从前一次任务开始时刻算起。它不会等待前一个任务完成,因此如果任务执行时间超过了设定的时间间隔,可能会有重叠的任务实例在运行。
-
fixedDelay: 类似于
fixedRate
,但是它是以前一次任务的完成时刻作为下一次任务启动的时间基准。这种方式可以确保每次只有一个任务实例在运行,前提是任务的执行时间短于延迟时间。 -
initialDelay: 在第一次执行之前等待的时间(毫秒)。这个参数通常与
fixedRate
或fixedDelay
一起使用,用来设置首次执行前的延迟。 -
zone: 定义时区,默认是系统的默认时区。如果你的应用需要在全球不同地区运行,明确指定时区可能是很重要的。
Cron表达式、fixedRate、fixedDelay、initialDelay如何选择
- 如果你需要非常具体的调度模式,如每天凌晨两点执行某个任务,那么应该选择Cron表达式。
- 如果你希望任务以固定的速率重复执行,不论每次执行花费多少时间,你应该选择
fixedRate
。 - 如果你希望在前一个任务完全结束后再等待一段固定时间才开始下一个任务,那么
fixedDelay
是更好的选择。 - 如果你需要设置首次执行的延迟,可以添加
initialDelay
参数到你的调度配置中。
示例代码
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;