Spring cron 定时任务
Spring 的 @Scheduled(cron) 使用六个字段,秒在最前,设置了的日期字段必须同时满足。 选择一个调度,查看精确表达式、可直接粘贴的配置和接下来的运行时间。
调度
- 每 5 分钟
0 */5 * * * * - 每小时
0 0 * * * * - 每分钟
0 * * * * * - 每 10 分钟
0 */10 * * * * - 每 15 分钟
0 */15 * * * * - 每 30 分钟
0 */30 * * * * - 每天零点
0 0 0 * * * - 每天早上 9 点
0 0 9 * * * - 工作日早上 9 点
0 0 9 * * 1-5 - 每周一
0 0 0 * * 1 - 每月 1 号
0 0 0 1 * * - 每 6 小时
0 0 */6 * * * - 每周日零点
0 0 0 * * 0 - 每 2 小时
0 0 */2 * * * - 每 12 小时
0 0 */12 * * * - 每天中午 12 点
0 0 12 * * * - 每周五
0 0 0 * * 5 - 每月最后一天
0 0 0 L * * - 每季度
0 0 0 1 */3 * - 每 2 分钟
0 */2 * * * * - 每 3 小时
0 0 */3 * * * - 每天早上 6 点
0 0 6 * * * - 每天晚上 6 点
0 0 18 * * * - 每天两次
0 0 */12 * * * - 工作日晚上 6 点
0 0 18 * * 1-5 - 周末上午 10 点
0 0 10 * * 0,6 - 每月 15 号
0 0 0 15 * * - 每月第一个周一
0 0 9 * * MON#1 - 每月最后一个周五
0 0 17 * * FRIL - 每年一次
0 0 0 1 1 * - 每 30 秒
*/30 * * * * * - 每 3 分钟
0 */3 * * * * - 每 20 分钟
0 */20 * * * * - 每 4 小时
0 0 */4 * * * - 每 8 小时
0 0 */8 * * * - 每天凌晨 1 点
0 0 1 * * * - 每天凌晨 2 点
0 0 2 * * * - 每天凌晨 3 点
0 0 3 * * * - 每天早上 8 点
0 0 8 * * * - 每个工作日
0 0 0 * * 1-5 - 每个周末
0 0 0 * * 0,6 - 每周二
0 0 0 * * 2 - 每周三
0 0 0 * * 3 - 每周四
0 0 0 * * 4 - 每周六
0 0 0 * * 6 - 每 6 个月
0 0 0 1 */6 * - 每 10 秒
*/10 * * * * * - 每 5 秒
*/5 * * * * *
Spring 的坑
秒在最前Spring 表达式有六个字段:秒、分、时、日、月、星期。五段式 crontab 会被拒绝。
两个日期字段必须同时满足0 0 9 1-7 * MON 是每月第一个周一。同样的字段在 crontab 里表示 1-7 号或任意周一。
周日是 0 或 7和 Quartz 不同,Quartz 周日是 1。在两者之间搬表达式时,用名称(MON-SUN)最安全。
要先开启调度在配置类上加 @EnableScheduling,否则 @Scheduled 方法不会运行。默认所有任务共用一个线程。
与 Spring 互转
常见问题
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。