今天这篇文章介绍一下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()。
多线程定时任务如何配置?
下面介绍三种方案配置多线程下的定时任务。
直接实现schedulingconfigurer这个接口,设置taskscheduler,代码如下:
@configurationpublic class scheduleconfig implements schedulingconfigurer { @override public void configuretasks(scheduledtaskregistrar taskregistrar) { //设定一个长度10的定时任务线程池 taskregistrar.tscheduler(executors.newscheduledthreadpool(10)); }}
spring boot quartz 已经提供了一个配置用来配置线程池的大小,如下;
spring.task.scheduling.pool.size=10
只需要在配置文件中添加如上的配置即可生效!
@async这个注解都用过,用来开启异步任务的,使用@async这个注解之前一定是要先配置线程池的,配置如下:
@bean public threadpooltaskexecutor taskexecutor() { threadpooltaskexecutor pool党员的党龄从taskexecutor = new threadpooltaskexecutor(); pooltaskexecutor.tcorepoolsize(4); pooltaskexecutor.tmaxpoolsize(6); // 设置线程活跃时间(秒) pooltaskexecutor.tkeepaliveconds(120); // 设置队列容量 pooltaskexecutor.tqueuecapacity(40); pooltaskexecutor.trejectedexecution科幻作文handler(new threadpoolexecutor.callerrunspolicy()); // 等待所有任务结束后再关闭线程池 pooltaskexecutor.twaitfortaskstocompleteonshutdown(true); return pooltaskexecutor; }
然后在@scheduled方法上标注@async这个注解即可实现多线程定时任务,代码如下:
@async @scheduled(cron = "0/2 * * * * ? ") 小善大爱 public void test2() { system.out.println("..................执行test2................."); }
本篇文章介绍了spring boot 中 实现多线程定时任务的三种方案,你喜欢哪一种?
到此这篇关于spring boot多个定时任务阻塞问题解决的考拉小巫的英语学习日记文章就介绍到这了,更多相关springboot多定时任务阻塞内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!
本文发布于:2023-04-04 13:09:10,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/zuowen/f74c4215055d80ca1257d75dfd9a07a7.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文word下载地址:Spring Boot多个定时任务阻塞问题的解决方法.doc
本文 PDF 下载地址:Spring Boot多个定时任务阻塞问题的解决方法.pdf
留言与评论(共有 0 条评论) |