具有固定顺序的Spring Batch多线程作业

我创建了一个 spring 批处理作业,它读取平面CSV文件的块(提交级别= 10)并将输出写入另一个平面文件 . 干净利落 . 为了测试本地扩展,我还使用具有10个线程池的TaskExecutor配置了tasklet,从而通过使用多线程步骤模式引入了并行性 . 正如预期的那样,这些线程会同时读取项目,直到它们的块被填满并且块被写入输出文件 . 同样如预期的那样,由于同时读取,项目的顺序已经改变 . 但是是否可以维持固定顺序,最好还是利用使用多线程获得的性能提升?

回答(2)

2 years ago

我想不出一个简单的方法 . 解决方法是在所有行前面添加一个ID,该ID在读取时按顺序创建 . 完成作业后,按ID对行进行排序 . 听起来很丑,但应该有用 .

2 years ago

我不认为有任何简单的解决方案,但只使用一个编写器线程(写入时也执行排序)和多个读取线程可以工作,但它不会可扩展..