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应用中轻松实现各种定时任务需求。

相关推荐
月月玩代码1 小时前
Actuator,Spring Boot应用监控与管理端点!
java·spring boot·后端
XPoet2 小时前
AI 编程工程化:Skill——给你的 AI 员工装上技能包
前端·后端·ai编程
阿珍爱上了阿强,在一个有星星的夜晚2 小时前
node后端页面性能监测分析
java·学习方法
Java程序之猿2 小时前
SpringBoot + camel+IBM MQ实现消息队列处理
java·spring boot·mybatis
码事漫谈2 小时前
从“功能实现”到“深度优化”:金仓数据库连接条件下推技术的演进之路
后端
码事漫谈2 小时前
数据库查询优化中的谓词下推策略与成本感知优化实践
后端
z_鑫2 小时前
SpringCloud FeignClient 中 Bean 重复注册冲突解决方案解析
java·spring boot·spring cloud
Amour恋空3 小时前
SpringBoot+Lombok+Logback实现日志
spring boot·后端·logback
廋到被风吹走3 小时前
【LangChain4j】特点功能及使用场景
后端·python·flask