springbatch设置throttle-limit参数不生效

20 篇文章 1 订阅
6 篇文章 0 订阅

背景描述

当springbatch任务处理缓慢时,就需要使用多线程并行处理任务。
参数throttle-limit用于控制当前任务能够使用的线程数的最大值。
调整throttle-limit为10时,处理线程只有8,再次增大throttle-limit值为20,处理线程依旧为8,并未生效。

问题原因

throttle-limit控制的是单个任务能够从线程池中获取的线程数的最大值,从这个值的注释说明可以看到,实际任务能够拿到的线程数量,不仅受throttle-limit参数控制,同时也受线程池的核心线程数配置影响。

原因很好理解,好比一个筐里只有十个苹果,就算规定可以拿20个苹果,其实也只能从筐子里拿到十个。
在这里插入图片描述

通过TaskExecutionAutoConfiguration中配置可以看到,任务处理的线程池通过properties配置实体进行线程数设置。
在这里插入图片描述

而properties中,核心线程数默认为8。即没有对线程池进行配置的情况下,一个任务到顶,撑死只能拿到8个线程。而throttle-limit默认配置为4,超过8时,则不会继续变大。
在这里插入图片描述

解决方案

当我们确实需要增加throttle-limit的值的时候,就必须先把线程池的线程数配置调大。
springbatch暴露了该配置项,支持任务处理线程池的调整。
在这里插入图片描述
配置项前缀为:spring.task.execution
线程池配置参数前缀:spring.task.execution.pool

即,在properties文件中,增加如下配置:

# 任务处理线程池线程数配置参数
### 核心线程数
spring.task.execution.pool.core-size=30
### 最大线程数
spring.task.execution.pool.max-size=30
### 等待队列容量
spring.task.execution.pool.queue-capacity=100

更多配置项,参考TaskExecutionProperties内容。

修改配置后,设置throttle-limit值为20,启动任务,可以看到并行处理的线程数达到了20个。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值