当前位置: 首页 > 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.xdnf.cn/news/1075645.html

相关文章:

  • 如何用废弃电脑变成服务器搭建web网站(公网访问零成本)
  • OpenCV CUDA模块设备层----- 正切(tangent)运算函数tan()
  • CSDN博客大搬家(本地下载markdown合适和图片本地化)
  • 关于 java:8. Java 内存模型与 JVM 基础
  • 基础算法合集-图论
  • 字节跳动 C++ QT PC客户端面试
  • Bessel位势方程求解步骤
  • OpenCV计算机视觉实战(14)——直方图均衡化
  • AutoCAD Electrical 2009无法激活
  • 通过python+openCV实现对图片中箭头方向的判断
  • 【Java面试】10GB,1GB内存,如何排序?
  • SQL参数化查询:防注入与计划缓存的双重优势
  • 「Java案例」计算矩形面积
  • 嵌入式SoC多线程架构迁移多进程架构开发技巧
  • 《用奥卡姆剃刀原理,为前端开发“减负增效”》
  • Ubuntu22.04 you are in emergency mode,键盘失效无法进入root命令行
  • 【Python使用】嘿马云课堂web完整实战项目第2篇:CMS页面管理需求,后端工程搭建【附代码文档】
  • Git 简介安装教程
  • vscode 改注释的颜色,默认是灰色的,想改成红色
  • 大数据(1)-hdfshbase
  • 【零基础学AI】第13讲:随机森林实战 - 用户行为预测
  • Spring Security 鉴权与授权详解(前后端分离项目)
  • 电脑开机加速工具,优化启动项管理
  • 服务器上设置了代理之后,服务器可以访问外网,但是不能访问服务器本地。如何解决
  • 重构老项目不再“踩雷”:飞算JavaAI的本地化智能合并实战
  • HarmonyOS NEXT应用元服务常见列表操作多类型列表项场景
  • 设计模式之外观模式
  • .net8导出影像图片按现场及天拆分
  • 调试W5500(作为服务器)
  • macos 使用 vllm 启动模型