【问题标题】:Spring Batch Chunk processingSpring Batch Chunk 处理
【发布时间】:2015-07-29 10:24:24
【问题描述】:

在 Spring Batch 中使用块处理(指定提交间隔)处理步骤级别时,有没有办法在 Writer 内部知道何时已读取和处理文件中的所有记录。我的想法是通过读取所有记录后,从文件读取到 ExecutionContext 的记录集合。

请帮忙。

【问题讨论】:

  • 你想对所有数据都被读取和处理(但还没有写入?)的信息做什么?

标签: java spring-batch


【解决方案1】:

我不知道这是否是预先构建的CompletionPolicy 之一,可以满足您的要求,但如果没有,您可以编写自定义CompletionPolicy,当作者返回null 时将块标记为已完成;这样您就可以保存从文件中读取的所有项目。
在那之后,你确定这正是你想要的吗?因为将所有项目存储在 ExecutionContext 中不是一个好习惯;此外,您将失去块处理、可重启性和所有其他 SB 功能...

【讨论】:

  • 感谢 Luca 的回复。我的要求是基本上读取一个文件(可以包含数百万条记录)。我还没有探索 CompletionPolicy 方法。可以为每个 Reader/Writer 指定吗?最终,我希望从文件中读取的所有文件都发送到下一步进行记录级别验证、转换然后生成输出文件。再次感谢。
  • 最后一点 - 将数据发送到下一步,可能更适合暂存(数据库)表
  • 感谢 Michael 的回复。您的意思是,如果从文件中读取的所有记录都需要传递到下一步进行验证/转换等,我应该将它们插入暂存表,然后让下一步从表中再次读取?
  • 也许我遗漏了一些东西:为什么需要读取内存中的所有记录,然后使用额外的步骤来处理/转换/读取每条记录?这种类型的问题是 SB 中的标准场景,可以使用 FlatFileItemReaderItemProcessorFlatFileItemWriter 的单个步骤来解决
  • 谢谢 Luca。是的,这似乎是一个标准场景。在你最近发表评论之前,我也想过一步完成所有事情。但可能有几个不同的验证和转换步骤涉及。因此我在考虑多个步骤。除了使用 executionContext 之外,还有一种不同的方式来在步骤之间交换数据。在论坛的某个地方,有人建议使用 Spring beans。谢谢。
猜你喜欢
  • 2019-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-26
  • 2017-07-23
  • 2016-06-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多