我们有一个springbatch作业,它读取文件(flatfileitemreader),处理它并将数据写入队列(jmsitemwriter)。
我们有另一个工作,它读取队列(jmsitemreader)并写入一个文件(flatfileitemwriter)。这是异步过程(在执行两个作业之间,我们必须执行一些手动过程。)
平面文件内容没有行标识符。我们在读取文件时使用多线程方法(“throttle-limit”)。因此,排队的消息不会保持与平面文件相同的顺序。
问题是我们应该生成一个关于原始订单的输出文件。因此传入文件中的第33行应该是第33行到传出文件中(它将包含原始行的内容,加上一些数据)。
springbatch是否提供“本机”命令输出的方式,尊重原始读取顺序?我使用“原生”,因为我们认为一个解决方案是创建一个额外的步骤,只是为了在文件中添加一个行号并在最后使用它,但我想知道这是否“重新发明轮子”...
我们正在使用SB 3.0.3
TIA,
鲍勃
答案 0 :(得分:2)
您描述的用例要求您维护不受支持的多个作业的顺序。理论上(虽然不能保证)单个单线程步骤将保留输入文件的顺序。
由于您正在阅读多线程庄园,因此在阅读时确实无法保证项目的顺序。您可以做的最好的事情是同步read方法并在读取项目时添加id。如果您尝试使用多线程解决的瓶颈在处理器或编写器中,这可能不是一个糟糕的选择。