SpringBatch配置多线程step
来源:互联网 发布:推广平台源码 编辑:程序博客网 时间:2024/06/08 02:41
SpringBatch批处理框架默认使用单线程完成任务的执行,但是他提供了对线程池的支持。使用tasklet的task-executor属性可以很容易的将普通的step转成多线程的step。
task-executor:任务执行处理器,定义后采用多线程执行任务,需要考虑线程安全问题。 throttle-limit:最大使用线程池数目。
如果我们希望示例中的 billingStep 以并发方式执行,且并发任务数为 5,那么只需要做如下配置即可,见清单:
<step id="billingStep" next="payStep"> <tasklet task-executor="taskExecutor" throttle-limit="5"> <chunk reader="userDbReader" processor="billingProcessor" writer="billDbWriter" commit-interval="5" chunk-completion-policy=""> </chunk> </tasklet></step><beans:bean id="taskExecutor" class="org.springframework.core.task.SimpleAsyncTaskExecutor"></beans:bean>
Spring Core 为我们提供了多种执行器实现(包括多种异步执行器),我们可以根据实际情况灵活选择使用。
在多线程step中为了保证代码处理的正确性,要求所有在多线程step中处理的对象和操作必须都是线程安全的。但是SpringBatch框架提供的大部分的ItemReader、ItemWriter都不是线程安全的。所以需要自己保证多线程处理时候的线程安全。
那么,如何保证step的线程安全呢?
1.对reader的read方法使用synchronized关键字。
这种方式并不支持重启操作。当执行失败的时候并没有保存当前的状态数据导致无法知道哪些数据已经读取,哪些数据未读取。
多线程step提供了多个线程执行一个step的能力,但这种场景在实际业务中是用的并不是非常多。更多的是job中不同的step没有先后顺序,可以在执行期间并行的执行。SpringBatch提供了并行step的能力。可以通过split
元素来定义并行的作业流。
参考资料:使用 Spring Batch 构建企业级批处理应用: 第 2 部分
阅读全文
0 0
- SpringBatch配置多线程step
- SpringBatch Step StepExecution
- springbatch多step,decision
- springBatch多线程设置
- SpringBatch配置数据库
- springbatch常规配置
- SpringBatch 配置Job之一
- SpringBoot+SpringBatch+Oracle配置
- SpringBatch 配置Job之二
- Dataguard配置Step by Step
- 跑批利器--往数据库里配置SpringBatch
- Mantis平台Step-By-Step配置手册
- Oracle dataguard配置Step by Step
- josso for tomcat配置 step by step
- MySQL Cluster配置step by step
- step by step学习LAMP配置
- step by step入门LAMP配置
- step by step 配置mysql复制
- STM32 PWM调制信号关闭后端口电平不确定处理
- Tetris_Java(I)千里之行始于足下
- Parallel&Distributed Algorithm-1
- 每天一道LeetCode-----某个数在递增序列第一次和最后一次出现的位置
- AFN提交类型和回应类型
- SpringBatch配置多线程step
- JavaWeb框架-【Hibernate+Struts2】-框架世界的联手-图书管理系统
- LLVM学习笔记(21)
- leetcode 6 ZigZag Conversion
- Android,沉浸式状态栏,状态栏以及Toolbar颜色分开设置
- 提示错误:A child Container failed during start
- C99中的for语句
- Linux 中mysql-5.7.9 64位 RPM 详细安装
- vue学习07--进入/离开&列表过渡