Spring @Scheduled参数区别、组合及应用场景有哪些?

摘要:SpringBoot Scheduled 常见用法: https:www.cnblogs.comvipsoftp15751660.html import cn.hutool.core.date.DateUtil; import o
SpringBoot Scheduled 常见用法: https://www.cnblogs.com/vipsoft/p/15751660.html import cn.hutool.core.date.DateUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.scheduling.annotation.EnableScheduling; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; @Component @EnableScheduling public class TestJob { Logger logger = LoggerFactory.getLogger(this.getClass()); @Scheduled(cron = "*/10 * * * * ?") public void crontabTask() throws InterruptedException { logger.info("这是基于 cron -- 按系统时钟算 开始: {}", DateUtil.now()); Thread.sleep(2000); logger.info("这是基于 cron -- 按系统时钟算 结束: {}", DateUtil.now()); } @Scheduled(fixedRate = 10 * 1000) public void fixedRateTask() throws InterruptedException { logger.info("这是基于 fixedRate -- 从上一次启动开始算 开始: {}", DateUtil.now()); Thread.sleep(2000); logger.info("这是基于 fixedRate -- 从上一次启动开始算 结束: {}", DateUtil.now()); } @Scheduled(fixedDelay = 10 * 1000) public void fixedDelayTask() throws InterruptedException { logger.info("这是基于 fixedDelay -- 从上一次结束开始算 开始: {}", DateUtil.now()); Thread.sleep(2000); logger.info("这是基于 fixedDelay -- 从上一次结束开始算 结束: {}", DateUtil.now()); } } 1. 基本概念对比 cron 定义:使用 Unix/Linux 风格的 cron 表达式 语法:秒 分 时 日 月 周 年(可选) 特点: 基于日历的调度 执行时间固定 适合在特定时间点执行任务 // 每天凌晨1点执行 @Scheduled(cron = "0 0 1 * * ?") // 每5分钟执行(在每分钟的0秒执行) @Scheduled(cron = "0 */5 * * * ?") // 每小时的10分、30分、50分执行 @Scheduled(cron = "0 10,30,50 * * * ?") fixedRate 定义:固定频率执行,从上一次开始时间开始计算间隔 特点: 固定频率,不关心任务执行时间 如果任务执行时间超过间隔,会立即开始下一次执行 可能造成任务重叠 // 每5分钟执行一次(从上次开始算起) @Scheduled(fixedRate = 5 * 60 * 1000) fixedDelay 定义:固定延迟执行,从上一次结束时间开始计算间隔 特点: 保证任务执行间隔 不会出现任务重叠 适合需要保证任务串行执行的场景 // 上次执行结束后,等待5分钟再执行下次 @Scheduled(fixedDelay = 5 * 60 * 1000) initialDelay 定义:首次执行延迟时间 特点: 只在第一次执行前等待 可以与 fixedRate 或 fixedDelay 组合使用 不影响后续执行间隔 // 应用启动后等待10分钟,然后每5分钟执行一次 @Scheduled(ini
阅读全文