3

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

4

2 回答 2

2

我想不出一个简单的方法。一种解决方法是在所有行前面加上一个在读取时按顺序创建的 ID。完成工作后,按 id 对行进行排序。听起来很hacky,但应该可以。

于 2011-08-19T10:20:55.290 回答
0

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

于 2011-08-19T10:25:51.937 回答