Itemwriter 输出使用与 itemreader 用于读取文件相同的顺序

Itemwriter output using same order that itemreader used to read file

我们有一个读取文件 (flatfileitemreader)、处理文件并将数据写入队列 (jmsitemwriter) 的 springbatch 作业。

我们还有另一个读取队列 (jmsitemreader) 并写入文件 (flatfileitemwriter) 的作业。它是异步过程(在执行两个作业之间,我们必须执行一些手动过程)。

平面文件内容没有行标识符。并且我们在读取文件时使用多线程方法 ("throttle-limit")。因此,排队的消息不会保持它们在平面文件中的顺序。

问题是我们应该生成一个符合原始顺序的输出文件。所以传入文件中的第 33 行,应该是传出文件中的第 33 行(它将包含原始行的内容,加上一些数据)。

springbatch 是否提供 "native" 一种按照原始读取顺序对输出进行排序的方法?我使用 "native" 是因为我们认为一个解决方案是创建一个额外的步骤,仅向文件添加行号并在末尾使用它,但我想知道这个 "reinvent the wheel"...

我们正在使用 SB 3.0.3

TIA,

鲍勃

您描述的用例要求您在不受支持的多个作业之间保持顺序。理论上(虽然不能保证)单个单线程步骤将保留输入文件的顺序。

由于您是在多线程庄园中阅读,因此确实没有一种好的方法来保证项目在阅读时的顺序。您可以做的最好的事情是同步读取方法并在读取项目时添加一个 id。如果您尝试使用多线程解决的瓶颈在处理器或编写器中,这可能是一个不错的选择。