Spring Boot多个定时任务阻塞问题的解决方法是什么
发表于:2025-01-18 作者:千家信息网编辑
千家信息网最后更新 2025年01月18日,Spring Boot多个定时任务阻塞问题的解决方法是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言今天介绍一下
千家信息网最后更新 2025年01月18日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安全错误
数据库的锁怎样保障安全
计算机网络技术与安全试题
网络安全周致词
重庆中国数据库技术大会
快递互联网和科技的发展
岳阳软件开发培训学校
青浦区技术网络技术服务怎么样
软件开发笔试题上海银行
我的世界服务器保持开启
ccie安全和网络安全
沈阳软件开发六年后工资
重新启动数据库文件
联机侠服务器咋做rpg装备
软件开发笔试
软件开发 精益
怒江州网络安全知识竞赛
安康市软件开发
sk5服务器管理
苏州阿里云服务器专区
服务器关闭ie安全
网络安全技术有哪些方面
java优化数据库
数据库建设可行性方案
工会会员实名数据库学历
树莓派当打印机服务器
打开网络安全手抄报视频
知识产权信息数据库是
线上网络安全知识学习有什么影响
软件开发更新快很难
如何提高我的世界的服务器
网络安全和信息化及国家安全