谷歌搜索网页版入口,合肥网络seo推广服务,wdcp 默认网站,北京小型网站建设背景描述
当springbatch任务处理缓慢时#xff0c;就需要使用多线程并行处理任务。 参数throttle-limit用于控制当前任务能够使用的线程数的最大值。 调整throttle-limit为10时#xff0c;处理线程只有8#xff0c;再次增大throttle-limit值为20#xff0c;处理线程依旧为…背景描述
当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-size30
### 最大线程数
spring.task.execution.pool.max-size30
### 等待队列容量
spring.task.execution.pool.queue-capacity100更多配置项参考TaskExecutionProperties内容。
修改配置后设置throttle-limit值为20启动任务可以看到并行处理的线程数达到了20个。