跳到正文
cron.surf

让 Spring @Scheduled 任务每天早上 9 点运行

Spring 中“每天早上 9 点”的表达式是 0 0 9 * * *。下面是可直接粘贴的配置、接下来的运行时间和需要注意的地方。 Spring 的 @Scheduled(cron) 使用六个字段,秒在最前,设置了的日期字段必须同时满足。

0 0 9 * * *在工具中打开

“在09:00”

@Scheduled 方法

@Scheduled
@Scheduled(cron = "0 0 9 * * *", zone = "UTC")
public void dailyAt9am() {
    // job
}

Spring 的坑

秒在最前Spring 表达式有六个字段:秒、分、时、日、月、星期。五段式 crontab 会被拒绝。
两个日期字段必须同时满足0 0 9 1-7 * MON 是每月第一个周一。同样的字段在 crontab 里表示 1-7 号或任意周一。
周日是 0 或 7和 Quartz 不同,Quartz 周日是 1。在两者之间搬表达式时,用名称(MON-SUN)最安全。
要先开启调度在配置类上加 @EnableScheduling,否则 @Scheduled 方法不会运行。默认所有任务共用一个线程。

常见问题

Spring 中“每天早上 9 点”的 cron 表达式是什么?

0 0 9 * * *。含义:在09:00

Spring 的定时任务按哪个时区运行?

按 JVM 默认时区。在 @Scheduled 上设置 zone = "Asia/Shanghai"(任意 IANA 名)即可固定。

Spring cron 能每 30 秒运行吗?

能。Spring 有秒字段:*/30 * * * * *。

Spring 支持 L 和 # 吗?

支持,从 Spring 5.3 起:日字段支持 L、LW、L-n 和 nW,星期字段支持 dL 和 d#n。