Java Spring批处理每个资源的MultiResourceItemReader区块提交

Java Spring批处理每个资源的MultiResourceItemReader区块提交,java,spring,spring-batch,Java,Spring,Spring Batch,我目前有一个Spring批处理作业,它执行以下操作: 使用委托给FlatFileItemReader的MultiResourceItemReader读取csv文件列表 将每个文件拆分为块,并将每个块作为JMS消息写入,每条消息包含块中的行列表和JSON格式的底层资源的文件名 我希望每个块只包含单个文件资源中的行,以便JMS消息上的文件名链接到相应的文件 问题是,当一个文件资源的处理完成时,读取器将继续并处理下一个资源,这意味着来自多个资源文件的行将被插入到同一块中,并且filename属性不一定

我目前有一个Spring批处理作业,它执行以下操作:

  • 使用委托给FlatFileItemReader的MultiResourceItemReader读取csv文件列表
  • 将每个文件拆分为块,并将每个块作为JMS消息写入,每条消息包含块中的行列表和JSON格式的底层资源的文件名
  • 我希望每个块只包含单个文件资源中的行,以便JMS消息上的文件名链接到相应的文件

    问题是,当一个文件资源的处理完成时,读取器将继续并处理下一个资源,这意味着来自多个资源文件的行将被插入到同一块中,并且filename属性不一定与块中的基础数据匹配

    是否有任何干净的方法可以防止读取器在同一块中包含来自不同文件资源的行


    编辑:我认为解决方案需要使用自定义块完成策略以某种方式确定当前正在读取的项是否来自与前一行相同的资源,但不确定这是否可行。有什么想法吗?

    我将实现更改为使用MultiResourcePartitioner为每个文件创建分区步骤,现在一切正常。

    解决方案正确。您可能还需要使用
    peakableitemreader
    来查看下一个项目是下一个区块的一部分还是这个区块的一部分。。。