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

springboot中多个定时任务(@Scheduled)如何互不影响

现象

在springboot中,添加 多个 @Scheduled(cron = “0 10 7 * * ?”) 注解,例如:
@Scheduled(cron = “0 10 5 * * ?”)
@Scheduled(cron = “0 10 6 * * ?”)
@Scheduled(cron = “0 10 7 * * ?”)
在执行时发现,如果6点10分的任务到了7点10分,还没完成,那7点10分的任务不会正常开始执行,要等6点10分的任务接收后,7点10分的任务才会开始执行。
在我的程序中,几个定时任务之间没有依赖关系,所以我不想等待6点10分的任务,到了7点10分正常开始执行就行,该怎么做呢

原因

在 Spring Boot 中,默认情况下,@Scheduled 任务使用的是 单线程的 TaskScheduler,这意味着:

  • 所有定时任务会串行执行(一个任务执行完,才会执行下一个)。
  • 如果某个任务执行时间过长或阻塞,后续任务会被延迟,甚至“堆积”无法执行。

解决方案

配置多线程任务调度

import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.SchedulingConfigurer;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import org.springframework.scheduling.config.ScheduledTaskRegistrar;@Configuration
public class SchedulerConfig implements SchedulingConfigurer {@Overridepublic void configureTasks(ScheduledTaskRegistrar taskRegistrar) {ThreadPoolTaskScheduler taskScheduler = new ThreadPoolTaskScheduler();taskScheduler.setPoolSize(5); // 设置线程池大小(根据任务数量调整)taskScheduler.setThreadNamePrefix("scheduled-task-");taskScheduler.initialize();taskRegistrar.setTaskScheduler(taskScheduler);}
}

效果

  • 每个 @Scheduled 任务会分配独立的线程执行,互不阻塞。
  • 适用于 任务之间无依赖关系 的场景。
http://www.lqws.cn/news/588727.html

相关文章:

  • jenkins集成sonarqube(使用token进行远程调用)
  • 查看CPU支持的指令集和特性
  • 项目:数据库应用系统开发:智能电商管理系统
  • 华为云Flexus+DeepSeek征文 | 基于华为云Flexus X实例部署Dify平台构建企业行政助手的可用性研究
  • 第 1 课:Flask 简介与环境配置(Markdown 教案)
  • HTML之常用基础标签
  • LeetCode Hot100(图论)
  • CSDN博客大搬家(本地下载markdown合适和图片本地化)
  • Python 爬虫入门教程:Requests 和 BeautifulSoup 实战
  • 设置方法区内存的大小
  • Linux 系统管理:自动化运维与容器化部署
  • 深入理解指针(3)
  • 【甲方安全建设】敏感数据检测工具 Earlybird 安装使用详细教程
  • httpd-devel 与服务无关
  • BERT 模型详解:结构、原理解析
  • AI编程实战:Cursor黑科技全解析
  • RocketMQ第五节(springboot整合MQ)
  • 计算机网络中那些常见的路径搜索算法(一)——DFS、BFS、Dijkstra
  • 从性能优化赛到社区Committer,走进赵宇捷在Apache Fory的成长之路
  • 条件运算符和逗号运算
  • 重头开始学ROS(8)---LVI-SLAM复现与实机部署Ubuntu20.04
  • Flutter视频压缩插件video_compressffmpeg_kit_flutter_new
  • C#索引和范围:简化集合访问的现代特性详解
  • 【Springai】 2指定模型的三种方式(Ollama)
  • 【算法】动态规划:1137. 第 N 个泰波那契数
  • (12)python+playwright自动化测试-iframe-中
  • torchvision中的数据使用
  • vue常见问题:
  • RNN中张量参数的含义与应用
  • stm32达到什么程度叫精通?