当前位置: 首页 > news >正文

SpringBoot 定时任务 @Scheduled 详细解析

SpringBoot 定时任务 @Scheduled 详细解析

@Scheduled

@Scheduled是Spring框架提供的一个注解,用于在Spring应用中定义定时任务。通过使用 @Scheduled注解,可以简化配置和管理定时任务流程,无需编写复杂的调度逻辑。

启动定时任务

在使用 @Scheduled注解之前,需要在Spring配置类中启用定时任务支持。通常在Spring Boot应用的主配置类上添加 @EnableScheduling注解。

定义定时任务

在需要执行定时任务的方法前,自定义@Scheduled的调度策略

1. cron (常用)

使用Cron表达式来指定调度时间。Cron表达式是一个字符串,用于定义任务的执行时间。
cron表达式格式

秒 分 时 日 月 周 年(可选)

例如:
“0 0 1 * * ?”:每天凌晨1点执行。
“0 0/5 * * * ?”:每5分钟执行一次。
“0 0 12 ? * WED”:每周三中午12点执行。

@Scheduled(cron = "0 0 1 * * ?")
public void cronTask() {System.out.println("Cron task - " + System.currentTimeMillis());
}

2. fixedRate

每隔固定的时间间隔执行一次任务。无论上一次任务是否完成,都会在指定的时间间隔后再次启动任务。

@Scheduled(fixedRate = 5000)
public void fixedRateTask() {System.out.println("Fixed rate task - " + System.currentTimeMillis());try {Thread.sleep(3000);} catch (InterruptedException e) {e.printStackTrace();}
}

3. fixedDelay

在上一次任务完成后,等待固定的时间间隔再执行下一次任务。

@Scheduled(fixedDelay = 3000)
public void fixedDelayTask() {System.out.println("Fixed delay task - " + System.currentTimeMillis());try {Thread.sleep(2000);} catch (InterruptedException e) {e.printStackTrace();}
}

4. initialDelay

首次执行任务前的延迟时间,可以与 fixedRate 或 fixedDelay 一起使用。适用于不想让任务立即执行的情况

@Scheduled(initialDelay = 2000, fixedRate = 5000)
public void initialDelayTask() {System.out.println("Initial delay task - " + System.currentTimeMillis());
}

5. zone

用于指定定时任务的时间区域(时区)。这对于跨时区的应用非常重要,因为它确保定时任务在指定的时区中按预期时间执行。就像下面这个例子,每天在北京时间凌晨一点执行,而不是美国中部时间的1点。

@Scheduled(cron = "0 0 1 * * ?", zone = "Asia/Shanghai")
public void scheduledTask() {// 任务逻辑
}

6. timeUnit

用于指定时间的间隔单位,默认为 毫秒

  • TimeUnit.NANOSECONDS:纳秒
  • TimeUnit.MICROSECONDS:微秒
  • TimeUnit.MILLISECONDS:毫秒
  • TimeUnit.SECONDS:秒
  • TimeUnit.MINUTES:分钟
  • TimeUnit.HOURS:小时
  • TimeUnit.DAYS:天
@Scheduled(fixedRate = 5, timeUnit = TimeUnit.SECONDS)
public void scheduledTask() {}

http://www.mrgr.cn/news/61152.html

相关文章:

  • GPT Notes 3.2.1.2 | 最强GPT解锁会员版无需登录无限制使用
  • docker访问权限问题
  • 浅谈云计算06 | 云管理系统架构
  • Elasticsearch:向量数据库基础设施类别的兴衰
  • OpenCV相机标定与3D重建(51)对 3x3 矩阵进行 RQ 分解(RQ Decomposition)函数RQDecomp3x3()的使用
  • C++ ——— 内部类
  • CentOS7安装Docker-2024
  • 软考信息系统监理师 高分必背
  • 3. 无重复字符的最长子串
  • 虚拟现实辅助工程技术助力航空航天高端制造业破局
  • 3211、生成不含相邻零的二进制字符串-cangjie
  • 富格林:曝光可信经验击败陷阱
  • [ComfyUI]Flux 局部重绘,无需 ControlNet,原生就足够强大!
  • Java中的自动装箱(Autoboxing)和拆箱(Unboxing)机制
  • 学点高数-数学上的集合练习①-三讲一测
  • Excel 单元格小数点精确位数机制
  • NOIP-2022 题解
  • 人工智能在单细胞测序和空间转录组学中的最新研究进展|顶刊速递·24-10-28
  • 【专用名词的离线语音识别在2024年底的解决方法调查-会议签到的补充】
  • 成品气楼参考图集有哪些?盘点5本实用图集,你都知道哪几本
  • MAC电脑的ifconfig输出
  • 【linux开发-驱动】-RS232/485相关
  • 基于Python的PostgreSQL数据库操作示例(二)
  • Vue3 学习笔记(十一)Vue生命周期
  • linux命令小总结
  • H5底部输入框点击弹起来的时候被软键盘遮挡bug