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

相关推荐
Oneslide5 小时前
机械革命 单系统纯净重装Ubuntu(全盘覆盖,清空原有Windows)
后端
GetcharZp5 小时前
告别OOM!用Go+libvips实现30000×50000超大图片的流式瓦片服务
后端·go
IT_陈寒5 小时前
JavaScript项目实战经验分享
前端·人工智能·后端
用户47949283569156 小时前
6w star,GitHub 趋势第一的 Ponytail,这个agent插件到底在火什么
前端·后端
吃饱了得干活7 小时前
Spring Cloud Gateway 微服务网关:路由、断言、过滤器
java·spring cloud
神奇小汤圆7 小时前
2026一线大厂Java八股文精选(附答案,高质量整理)
后端
Warson_L8 小时前
LangGraph入门学习资料
后端
神奇小汤圆8 小时前
Spring Boot → Solon 注解迁移实战指南:一张对照表说清楚
后端
kfaino8 小时前
码农的AI翻身(四)你好,我叫 Attention
人工智能·后端
lwx572808 小时前
探秘InnoDB:搞懂它的内存、线程、磁盘与日志刷盘策略
java·后端