首页 > 解决方案 > Spring batch - 项目阅读器知道阅读器处理的最后一条记录

问题描述

ItemReader 每次作业运行时都会从不断增长的现有表中读取。我正在寻找 Spring 批处理中的选项,以便在每次调度作业运行时仅查询新记录。

如果我读取了 50000 条记录,则下一个计划应从 50001 开始。

我的想法是将 ItemReader 读取的最后一条记录的 id (整个阅读器输出的最后一个,而不是每个块的最后一个)保存在 DB 中,并在后续的作业计划中使用。我将从主表返回按 id 排序的数据。

我怎么知道作者的最后一条记录?有任何想法吗。

标签: springspring-bootspring-batchspring-jdbc

解决方案


我会通过在运行批处理作业时传递需要作为作业参数处理的记录的 ID 范围(即fromId和)来明确说明。toId然后在 中ItemReader,就可以依靠这个 ID 范围返回数据进行处理了。

并以某种方式将已处理的最新 ID 保存到数据库中(例如,JobExecutionListener在作业完成时使用)。当下一个调度作业触发时,找出下一个没有被处理的ID,然后以这个下一个ID作为参数启动另一个作业实例。


推荐阅读