我正在从包含时间戳的输入源读取数据。我对源的查询是基于时间戳的时间范围。
让我们说时间范围是1分钟。我的读者在1分钟范围内读取记录并将其传递给处理器。处理器一次只能处理100条记录。读者应该继续使用100个记录的大小来调用处理器,直到所有记录都耗尽了那一分钟。在该作家被触发后,
我应该如何配置弹簧批来实现这一目标?
答案 0 :(得分:0)
关于Spring Batch的内部工作原理,您的术语并不完全正确。要将项目从阅读器通过可选处理器处理到编写器,Spring Batch使用块。 Spring Batch从您的ItemReader读取您的项目,直到读取器返回NULL(表示输入流已用尽)。然后,它可以选择通过调用ItemProcessor来处理这些项目,最后使用ItemWriter编写项目。
使用块大小配置块处理,这意味着读取和处理的项目以给定块大小的块的形式写入。
关于你的问题考虑到这一点:
请记住,在阅读器中使用NULL返回结束输入流会以退出状态SUCCESS终止作业。 Spring Batch不允许您再次启动此特定Job实例,除非您采取特定措施来允许此操作。因此,如果实际上有更多要处理的项目,则应使用某种JobParametersIncrementer或虚拟时间戳参数来配置Job。
另一种可能性(以及我个人的偏好)不是从阅读器返回NULL而是抛出一些例外,例如MoreItemsInInputStreamException或TimeRangeExceededException。通过这种方式,Job实例失败,因此Job操作员意识到还有更多工作要做,只需用相同的参数重新启动Job即可完成。
Steef