【发布时间】:2017-07-03 07:59:18
【问题描述】:
我目前有一个 Spring Batch 作业,它执行以下操作:
- 使用委托给 FlatFileItemReader 的 MultiResourceItemReader 读取 csv 文件列表。
- 将每个文件拆分成块,并将每个块作为 JMS 消息写入,每条消息都包含块中的行列表和 JSON 格式的基础资源的文件名。
我想要的是每个块只包含来自单个文件资源的行,以便 JMS 消息上的文件名将链接到相应的文件。
问题是当一个文件资源的处理完成时,阅读器将继续处理下一个资源,这意味着来自多个资源文件的行被插入到同一个块中,并且文件名属性不一定匹配底层块中的数据。
是否有任何干净的方法可以防止阅读器在同一块中包含来自不同文件资源的行?
编辑:我相信该解决方案将需要使用自定义块完成策略来以某种方式确定当前正在读取的项目是否来自与前一行相同的资源,但不确定这是否可行。有什么想法吗?。
【问题讨论】:
-
您在解决方案上是正确的。您可能还需要使用
PeekableItemReader来查看下一个项目是下一个块还是这个块的一部分...
标签: java spring spring-batch