当前位置: 首页 > news >正文

springbatch设置throttle-limit参数不生效

背景描述

当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个。

http://www.lryc.cn/news/14682.html

相关文章:

  • 用 tensorflow.js 做了一个动漫分类的功能(一)
  • 看完这篇Vue-element-admin,跟面试官聊骚没问题
  • 2022年全国职业院校技能大赛(中职组)网络安全竞赛试题A(5)
  • 基于Java+SpringBoot+Vue+Uniapp前后端分离商城系统设计与实现
  • 新建ES别名 添加别名 切换别名
  • MySQL —— 内外连接
  • EXCEL中文本和数字的相互转换方法
  • React源码分析6-hooks源码
  • Windows10神州网信政府版麦克风、摄像头的使用
  • 微机原理学习总结0:前言
  • LeetCode 1828. 统计一个圆中点的数目
  • Spring Boot + Vue3 前后端分离 实战 wiki 知识库系统<一>---Spring Boot项目搭建
  • leetcode 11~20 学习经历
  • LeetCode 双周赛 98,脑筋急转弯转不过来!
  • 函数的栈帧的创建和销毁
  • python filtermapreducezip
  • Centos7搭建hadoop3.3.4分布式集群
  • 骨传导耳机工作原理,骨传导耳机优缺点
  • IDEA高效插件和设置
  • Linux之网络流量监控工具ntopng YUM安装
  • 创建虚拟机,安装CentOS
  • ilasm 和 ildasm编译和反编译工具介绍使用教程
  • 代码随想录【Day20】| 654. 最大二叉树、617. 合并二叉树、700. 二叉搜索树中的搜索、98. 验证二叉搜索树
  • C++空指针和野指针
  • LinkedList正确的遍历方式-附源码分析
  • 【蓦然回首忆Java·基础卷Ⅱ】
  • Mybatis源码分析系列之第二篇:Mybatis的数据存储对象
  • 防护设备检测实验室建设完整方案SICOLAB
  • Linux知识之主机状态
  • 是时候为您的银行机构选择构建一个知识库了!