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

Spring Boot 定时任务的使用

前言

在实际开发中,我们经常需要实现定时任务的功能,例如每天凌晨执行数据清理、定时发送邮件等。Spring Boot 提供了非常便捷的方式来实现定时任务,本文将详细介绍如何在 Spring Boot 中使用定时任务。

一、Spring Boot 定时任务简介

Spring Boot 使用@Scheduled注解来实现定时任务功能,底层基于 Spring 的任务调度模块(Spring Task)。通过该注解,我们可以很方便地定义周期性执行的任务。

二、启用定时任务

首先,在 Spring Boot 应用中要启用定时任务,需要在主启动类或配置类上添加 @EnableScheduling 注解:

@SpringBootApplication
@EnableScheduling
public class ScheduledTaskApplication {public static void main(String[] args) {SpringApplication.run(ScheduledTaskApplication.class, args);}
}

三、创建定时任务

接下来,我们可以通过 @Scheduled 注解来定义定时任务方法。这些方法必须是无参的,并且返回类型为 void

@Component
public class ScheduledTasks {// 每隔5秒执行一次@Scheduled(fixedRate = 5000)public void runEveryFiveSeconds() {String time = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME);System.out.println("Fixed rate task - Current time: " + time);}// 每天上午10:00执行@Scheduled(cron = "0 0 10 * * ?")public void runAtTenAM() {String time = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME);System.out.println("Daily task at 10 AM - Current time: " + time);}// 初始延迟3秒后执行,之后每隔10秒执行一次@Scheduled(initialDelay = 3000, fixedDelay = 10000)public void delayedTask() {String time = LocalDateTime.now().format(DateTimeFormatter.ISO_DATE_TIME);System.out.println("Delayed task - Current time: " + time);}
}

四、@Scheduled 支持的参数

参数名描述
fixedDelay上次任务执行完后,间隔固定时间再次执行(毫秒)
fixedRate固定频率执行,无论上次任务是否完成
initialDelay初始延迟时间(毫秒),仅在首次执行时生效
cron使用 cron 表达式指定执行时间

Cron 表达式说明
Cron 表达式由6或7个字段组成,分别表示:

  • 秒(0–59)
  • 分(0–59)
  • 小时(0–23)
  • 日(1–31)
  • 月(1–12 或 JAN–DEC)
  • 周几(1–7 或 SUN–SAT)
  • (可选)年份(1970–2099)

示例:“0 0 10 * * ?” 表示每天上午10点执行。

五、多线程支持

默认情况下,Spring Boot 的定时任务是单线程的,即多个任务会串行执行。如果你希望任务并行执行,可以自定义任务调度器:

@Configuration
@EnableScheduling
public class SchedulerConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();taskScheduler.setPoolSize(5); // 设置线程池大小taskScheduler.initialize();taskRegistrar.setTaskScheduler(taskScheduler);}
}

六、注意事项

  • 定时任务方法不能有返回值。
  • 不建议在定时任务中执行耗时过长的操作,以免影响其他任务的执行。
  • 如果部署在分布式环境下,需要考虑使用 Quartz 或 XXL-JOB 等分布式任务调度框架。

七、总结

Spring Boot 提供了非常简单易用的方式来实现定时任务功能。通过 @Scheduled 注解和 @EnableScheduling 启用定时任务,开发者可以快速构建定时任务逻辑。结合cron表达式和线程池配置,可以满足大多数业务场景的需求。此外,如需更复杂的任务调度(如分布式环境下的任务协调),建议使用 Quartz 或 Spring Cloud Alibaba 的 XXL-JOB 等专业任务调度平台。

http://www.lryc.cn/news/2404680.html

相关文章:

  • Flutter:下拉框选择
  • SpringAI(GA):Nacos2下的分布式MCP
  • AC68U刷梅林384/386版本后不能 降级回380,升降级解决办法
  • [AI绘画]sd学习记录(二)文生图参数进阶
  • CRM管理系统中的客户分类与标签管理技巧:提升转化率的核心策略
  • 怎么解决cesium加载模型太黑,程序崩溃,不显示,位置不对模型太大,Cesium加载gltf/glb模型后变暗
  • 【AI系列】BM25 与向量检索
  • windows10搭建nfs服务器
  • simulink这边重新第二次仿真时,直接UE5崩溃,然后simulink没有响应
  • react 常见的闭包陷阱深入解析
  • 【CATIA的二次开发22】关于抽象对象Document概念详细总结
  • 模拟法解题的思路与算法分享
  • mysql密码正确SpringBoot和Datagrip却连接不上
  • 高保真组件库:数字输入框
  • 人工智能赋能高中学科教学的应用与前景研究
  • 【Linux】awk 命令详解及使用示例:结构化文本数据处理工具
  • 紫光同创FPGA系列实现Aurora 8b/10b协议
  • DAY 44 预训练模型
  • [Harmony]颜色初始化
  • 指针与函数参数传递详解 —— 值传递与地址传递的区别及应用
  • 【NLP中向量化方式】序号化,亚编码,词袋法等
  • C++学习-入门到精通【16】自定义模板的介绍
  • 关于脏读,幻读,可重复读的学习
  • 源码级拆解:如何搭建高并发「数字药店+医保购药」一体化平台?
  • 旅行商问题(TSP)的 C++ 动态规划解法教学攻略
  • unix/linux,sudo,其内部结构机制
  • Hadoop 3.x 伪分布式 8088端口无法访问问题处理
  • Redis线程安全深度解析:单线程模型的并发智慧
  • 零基础在实践中学习网络安全-皮卡丘靶场(第十期-Over Permission 模块)
  • 北京大学肖臻老师《区块链技术与应用》公开课:12-BTC-比特币的匿名性