【发布时间】:2021-06-23 12:09:32
【问题描述】:
ItemReader 每次作业运行时都会从不断增长的现有表中读取数据。我正在寻找 Spring 批处理中的选项,以便在每次调度作业运行时仅查询新记录。
如果我读取了 50000 条记录,下一个计划应该从 50001 开始。
我的想法是将 ItemReader 读取的最后一条记录的 id (整个读取器输出的最后一个,而不是每个块的最后一个)保存在 DB 中,并在后续作业计划中使用。我将从主表返回按 id 排序的数据。
我如何知道 writer 中的最后一条记录?任何想法。
【问题讨论】:
-
批处理是关于固定的、有限的数据集。 “不断增长的现有表”不是固定的数据集。您需要让每个作业实例处理一个固定的数据集,例如通过传递一系列 ID 作为作业参数,如“Ken Chan”所建议的。进程指示器模式是解决这个问题的另一种方法(使用布尔列标记已处理的记录,并使读取器在每次运行时只读取未处理的记录)。
标签: spring spring-boot spring-batch spring-jdbc