适用版本
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更新一张主张,多张从表、子表。模型如下:
模型
模型对象示例代码:
可以有多张从表,多张子表,这里是示意