springboot task

在Spring Boot中,Spring Task 是一个内置的轻量级定时任务框架,无需引入额外依赖,即可实现周期性任务的调度。它基于Spring Framework的`spring-context`模块,通过注解方式配置,使用简单且功能强大。

核心使用步骤

  1. 启用定时任务

在Spring Boot应用的主启动类上添加 `@EnableScheduling` 注解,以开启定时任务功能。

```java

@SpringBootApplication

@EnableScheduling

public class MyApplication {

public static void main(String[] args) {

SpringApplication.run(MyApplication.class, args);

}

}

```

  1. 定义定时任务

创建一个Spring管理的Bean(使用 `@Component` 等注解),并在需要定时执行的方法上使用 `@Scheduled` 注解来指定执行策略。

```java

@Component

public class MyTask {

// 每隔5秒执行一次(从上一次执行开始计时)

@Scheduled(fixedRate = 5000)

public void taskWithFixedRate() {

System.out.println("Fixed Rate Task executed at: " + LocalDateTime.now());

}

// 上一次任务执行结束后,等待2秒再执行下一次

@Scheduled(fixedDelay = 2000)

public void taskWithFixedDelay() {

System.out.println("Fixed Delay Task executed at: " + LocalDateTime.now());

}

// 使用Cron表达式,每天凌晨2点执行

@Scheduled(cron = "0 0 2 * * ?")

public void taskWithCron() {

System.out.println("Cron Task executed at: " + LocalDateTime.now());

}

}

```

`@Scheduled` 注解的三种执行策略

  • `fixedRate`: 以固定的频率执行任务,间隔时间从每次任务的开始时刻算起。如果任务执行时间超过间隔时间,下一次任务会立即开始,可能导致任务并发执行。

  • `fixedDelay`: 以固定的延迟执行任务,间隔时间从每次任务的结束时刻算起。这能确保上一次任务完全结束后,才开始计算下一次的等待时间,更安全。

  • `cron`: 使用Cron表达式来指定复杂的调度规则,例如"每周一上午9点"或"每月1号的午夜"。这是最灵活的方式。

关键注意事项

  • 必须选择一种策略:在 `@Scheduled` 注解中,必须且只能指定 `fixedRate`、`fixedDelay` 或 `cron` 三者之一。

  • 单线程默认执行:Spring Task 默认使用单线程执行所有定时任务。如果一个任务执行时间过长,会阻塞其他任务的执行。如需并行执行,可以配置自定义的 `TaskScheduler`。

  • Cron表达式格式:标准的Cron表达式包含6或7个字段(秒、分、时、日、月、周、年),Spring Task 支持7个字段的格式。

通过以上方式,即可在Spring Boot应用中轻松实现各种定时任务需求。

相关推荐
二哈赛车手4 小时前
新人笔记---ApiFox的一些常见使用出错
java·笔记·spring
栗子~~5 小时前
JAVA - 二层缓存设计(本地缓冲+redis缓冲+广播所有本地缓冲失效) demo
java·redis·缓存
YDS8295 小时前
DeepSeek RAG&MCP + Agent智能体项目 —— RAG知识库的搭建和接口实现
java·ai·springboot·agent·rag·deepseek
candyTong6 小时前
Claude Code 的 Edit 工具是怎么工作的
javascript·后端·架构
未若君雅裁6 小时前
MyBatis 一级缓存、二级缓存与清理机制
java·缓存·mybatis
AI人工智能+电脑小能手6 小时前
【大白话说Java面试题 第65题】【JVM篇】第25题:谈谈对 OOM 的认识
java·开发语言·jvm
GetcharZp7 小时前
GitHub 2.4 万 Star!D2 正在重新定义程序员画图方式
后端
阿维的博客日记7 小时前
Nacos 为什么能让配置动态生效?(涉及 @RefreshScope 注解)
java·spring
雨辰AI7 小时前
SpringBoot3 + 人大金仓读写分离 + 分库分表 + 集群高可用 全栈实战
java·数据库·mysql·政务
辰海Coding8 小时前
MiniSpring框架学习-完成的 IoC 容器
java·spring boot·学习·架构