Spring Batch(7): 并行与扩展

本文详细介绍了Spring Batch在并行处理中的四种策略:多线程Step、并行Steps、远程Chunking和Partitioning。多线程Step通过TaskExecutor实现,要求组件线程安全;并行Steps处理无先后关系的任务;远程Chunking利用Master-Slave模式实现Item处理的并行化;Partitioning通过Partitioner和PartitionHandler进行数据分区和处理,适合需要了解数据源结构的情况。
摘要由CSDN通过智能技术生成

1. 概述

Spring Batch提供了多种方式用于处理并行,提高性能。主要分为2大类:
- 单个进程,多线程
- 多个进程

因此,可以细分为以下几类:
- 多线程Step(Multi-thread Step,single process)
- 并行Step(Parallel Steps, single process )
- Remote Chunking of Step( multi process)
- Partitioning a step(single or multi process)

2. Multi-Thread Step

最直接的方式是给Step配置一个TaskExecutor

<step id="loading">
    <tasklet task-executor="taskExecutor">...</tasklet>
</step>

此时,taskExecutor的线程并行来执行Item处理(统一item的read,process,write在同一个线程中执行)。可以限制TaskExecutor的阈值(默认为4):

<step id="loading"> <tasklet
    task-executor="taskExecutor"
    throttle-limit="20">...</tasklet>
</step>

需要注意的是,在多线程Step中,需要确保Reader、Processor和Writer是线程安全的,否则容易出现并发问题。Spring Batch提供的大部分组件都是非线程安全的,他们都保存有部分状态信息,主要是为了支持任务重启。

因此,使用多线程Step的核心任务是实现无状态化,例如不保存当前读取的item的cursor,而是同item的flag字段来区分item是否被处理过,已经被处理过的下次重启的时候,直接被过滤掉。

多线程Step实现的是单个Step的多线程化。

3. Parallel Steps

如果多个Step没有先后关系,可以并行执行,这是通过split和flow来实现的:

<job id="job1">
    <split id="split1" task-executor="taskExecutor" next
  • 7
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值