spring批处理多线程,读写顺序相同



我们正在试验从单线程到多线程的弹簧批处理。

设置相当简单:

  • Reader:读取一些特定排序的数据。
  • 处理器:获取一些附加值
  • Writer:按照读取的顺序将所有数据写入csv文件。

因此我们将阅读器更改为JdbcPagingItemReader并将排序从

转换为
order by firstname, lastname, id;

Map<String, Order> sortConfiguration = new HashMap<>();
sortConfiguration.put("firstname", Order.ASCENDING);
sortConfiguration.put("lastname", Order.ASCENDING);
sortConfiguration.put("id", Order.ASCENDING);

设置commit-interval为200。
批处理运行良好,但是我们的csv完全出了问题。
我假设spring会在每次提交后写入文件(并希望他按顺序写每页),但混乱程度大于块200行。
我得到了例如行1,3和5应该一起在一个线程和行2和4在另一个线程。
是否有保留顺序的选项或者是放弃多线程的唯一方法?

多线程与排序不兼容。如果使用多线程步骤,则条目将以未定义的顺序进行读取、处理和写入。参考文档的多线程步骤部分提到了这一点:

The result of the above configuration is that the Step executes by reading, processing,
and writing each chunk of items (each commit interval) in a separate thread of execution.
Note that this means there is no fixed order for the items to be processed, and a chunk
might contain items that are non-consecutive compared to the single-threaded case.

相关内容

  • 没有找到相关文章

最新更新