Spring Boot多个定时任务阻塞问题的解决方法是什么
发表于:2025-02-24 作者:千家信息网编辑
千家信息网最后更新 2025年02月24日,Spring Boot多个定时任务阻塞问题的解决方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言今天介绍一下
千家信息网最后更新 2025年02月24日Spring Boot多个定时任务阻塞问题的解决方法是什么
Spring Boot多个定时任务阻塞问题的解决方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
前言
今天介绍一下Spring Boot 中 如何开启多线程定时任务?
为什么Spring Boot 定时任务是单线程的?
想要解释为什么,一定要从源码入手,直接从@EnableScheduling这个注解入手,找到了这个ScheduledTaskRegistrar类,其中有一段代码如下:
protected void scheduleTasks() { if (this.taskScheduler == null) { this.localExecutor = Executors.newSingleThreadScheduledExecutor(); this.taskScheduler = new ConcurrentTaskScheduler(this.localExecutor); }}
如果taskScheduler为null,则创建单线程的线程池:Executors.newSingleThreadScheduledExecutor()。
多线程定时任务如何配置?
下面介绍三种方案配置多线程下的定时任务。
1、重写SchedulingConfigurer#configureTasks()
直接实现SchedulingConfigurer这个接口,设置taskScheduler,代码如下:
@Configurationpublic class ScheduleConfig implements SchedulingConfigurer { @Override public void configureTasks(ScheduledTaskRegistrar taskRegistrar) { //设定一个长度10的定时任务线程池 taskRegistrar.setScheduler(Executors.newScheduledThreadPool(10)); }}
2、通过配置开启
Spring Boot quartz 已经提供了一个配置用来配置线程池的大小,如下;
spring.task.scheduling.pool.size=10
只需要在配置文件中添加如上的配置即可生效!
3、结合@Async
@Async这个注解都用过,用来开启异步任务的,使用@Async这个注解之前一定是要先配置线程池的,配置如下:
@Bean public ThreadPoolTaskExecutor taskExecutor() { ThreadPoolTaskExecutor poolTaskExecutor = new ThreadPoolTaskExecutor(); poolTaskExecutor.setCorePoolSize(4); poolTaskExecutor.setMaxPoolSize(6); // 设置线程活跃时间(秒) poolTaskExecutor.setKeepAliveSeconds(120); // 设置队列容量 poolTaskExecutor.setQueueCapacity(40); poolTaskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 等待所有任务结束后再关闭线程池 poolTaskExecutor.setWaitForTasksToCompleteOnShutdown(true); return poolTaskExecutor; }
然后在@Scheduled方法上标注@Async这个注解即可实现多线程定时任务,代码如下:
@Async @Scheduled(cron = "0/2 * * * * ? ") public void test2() { System.out.println("..................执行test2................."); }
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注行业资讯频道,感谢您对的支持。
线程
任务
配置
注解
代码
方法
帮助
多个
问题
阻塞
清楚
内容
前言
大小
如上
容量
对此
接口
文件
文章
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
手机网络安全限制
ledmes系统软件开发
接收邮件服务器英文
全国网络安全与信息化厅
浙江软件开发过程标准
城厢梅子网络技术
微软服务器应用程序服务去哪儿了
关于网络技术的手抄报
access数据库身份证号
崇法律师咨询软件开发平台
ssql创建数据库
fifa22球队数据库
小学信息网络安全手抄报
软件开发是什么ie证书
有代码没数据库怎么办
海南逸鑫网络技术有限公司地址
怎么修改数据库的字段名
计生网络安全自查报告
建立网络安全应急机制
sqlite是一个数据库吗
现在学计算机网络技术好吗
贵州鲲鹏服务器价格多少
城厢梅子网络技术
网络安全的问题.(2分)
软件开发公司维护系统多少钱
网络安全问题研究论文
四川大学网络安全学院宋紫华
dede 数据库配置
数据库安全保护实验
网络安全屏障建设