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 分钟前
图书管理系统(2)图书列表接口
spring boot·mybatis·图书管理系统
tuokuac12 分钟前
MyBatis-Plus调用getEntity()触发异常
java·mybatis
_但为君故_22 分钟前
优化Tomcat的JVM内存
java·jvm·tomcat
yaoxin52112334 分钟前
328. Java Stream API - 使用 Optional 的正确姿势:为何、何时、如何使用
java·开发语言
再难也得平1 小时前
[LeetCode刷题]49.字母异位词分组(通俗易懂的java题解)
java·开发语言·leetcode
黎雁·泠崖1 小时前
Java 时间类(中):JDK8 全新时间 API 详细教程
java·开发语言
时艰.1 小时前
电商项目支付宝支付实战
java·服务器·网络
Coder_Boy_1 小时前
Java高级_资深_架构岗 核心知识点——高并发模块(底层+实践+最佳实践)
java·开发语言·人工智能·spring boot·分布式·微服务·架构
yy.y--1 小时前
Java线程实现浏览器实时时钟
java·linux·开发语言·前端·python
笨蛋不要掉眼泪1 小时前
Sentinel 流控规则详解:三种模式与三种效果实战指南
java·jvm·数据库·后端·sentinel