块处理Spring批量总大小未知

时间:2015-06-30 23:08:54

标签: java spring parallel-processing spring-batch

我正在从包含时间戳的输入源读取数据。我对源的查询是基于时间戳的时间范围。

让我们说时间范围是1分钟。我的读者在1分钟范围内读取记录并将其传递给处理器。处理器一次只能处理100条记录。读者应该继续使用100个记录的大小来调用处理器,直到所有记录都耗尽了那一分钟。在该作家被触发后,

我应该如何配置弹簧批来实现这一目标?

1 个答案:

答案 0 :(得分:0)

关于Spring Batch的内部工作原理,您的术语并不完全正确。要将项目从阅读器通过可选处理器处理到编写器,Spring Batch使用块。 Spring Batch从您的ItemReader读取您的项目,直到读取器返回NULL(表示输入流已用尽)。然后,它可以选择通过调用ItemProcessor来处理这些项目,最后使用ItemWriter编写项目。

使用块大小配置块处理,这意味着读取和处理的项目以给定块大小的块的形式写入。

关于你的问题考虑到这一点:

  1. 您应该将阅读器配置为阅读项目,直到您配置的时间段为止。然后返回NULL以指示所有内容都已读取。
  2. 您应该将块大小设置为100,以指示应该每100个项目调用一次编写器。
  3. 请记住,在阅读器中使用NULL返回结束输入流会以退出状态SUCCESS终止作业。 Spring Batch不允许您再次启动此特定Job实例,除非您采取特定措施来允许此操作。因此,如果实际上有更多要处理的项目,则应使用某种JobParametersIncrementer或虚拟时间戳参数来配置Job。

    另一种可能性(以及我个人的偏好)不是从阅读器返回NULL而是抛出一些例外,例如MoreItemsInInputStreamException或TimeRangeExceededException。通过这种方式,Job实例失败,因此Job操作员意识到还有更多工作要做,只需用相同的参数重新启动Job即可完成。

    Steef