SpringBatch组合写,复杂业务逻辑批处理必备

本文讨论了SpringBatch在处理复杂业务逻辑时遇到的问题,特别是官方API在处理多表更新时的局限。提出了使用MyBatis的CompositeItemWriter来实现复合写功能,详细介绍了如何配置和实现这个功能,以应对更新主表和多张从表的场景。通过自定义的MyBatisComplexItemWriter,实现了从主模型中获取每个ItemWriter所需的数据并进行校验,确保批量处理的正确性。
摘要由CSDN通过智能技术生成

适用版本

SpringBatch 3.0.8

Spring4.3

SpringBatch面临的现实问题

SpringBatch框架的批处理能力毋庸置疑,java批处理新规范JSR-352即是受其深度影响。但是其官方提供的API在实际运用中还是收到了挑战,比如在实际场景中一个任务(Step)会更新多张表,而SpringBatch官方提供的API一个Step只能更新一张表。可能有人会说可以在Processor中更新数据,不用全部在ItemWriter中更新数据,没错,这虽然能解决功能性上的问题,但破坏了SpringBatch的数据处理模型:ItemReader->Processor->ItemWriter,且性能上也不会好,要知道Processor中每次拿到的只是“一条数据”,在大数据量的更新操作上,使用不到JDBC的Batch功能。

复合写功能实现

MyBatis官方提供了组合写人ItemWriter:org.springframework.batch.item.support.CompositeItemWriter,但是很遺憾,使用起来并不方便,主要体现在参数的传递上。

场景

复合写要解决的应用场景是一个Step更新一张主张,多张从表、子表。模型如下:

模型

 

模型对象示例代码:

可以有多张从表,多张子表,这里是示意

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值