当前位置: 首页 > 知识库问答 >
问题:

Spring批处理-项目阅读器知道阅读器处理的最后一条记录

秦天宇
2023-03-14

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

如果我读了50000条记录,下一个时间表应该从50001开始。

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

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

共有1个答案

段干河
2023-03-14

我将通过传递记录的ID范围(即fromIdtoId)来明确这一点,这些记录在运行批处理作业时需要作为作业参数进行处理。然后在ItemReader中,您可以依赖此ID范围返回要处理的数据

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

 类似资料:
  • 选项2:(a)创建内部带有SalesReader的DiscountReader(ItemReader方法中的ItemReader)-它为每个正在读取的DiscountObj调用SalesReader。(b)创建SalesWriter将SalesReader获取的日期写入数据库。 在任何情况下,由SalesReader执行的查询的参数都是动态的,因为它必须从当前的DiscountObJ中提取。这是仅

  • 我正在使用JpaPagingItemReaderBuilder查询一个DB,结果被插入到另一个DB中。 查询返回的结果没有任何问题,但我得到了一个错误与读取器的返回,在处理器中,您可以检查我的编码和错误下面。 有谁能给我一点启示吗?为什么我不能处理结果?

  • 从文件系统(主块)读取数据并将其发送到远程块(从块)。问题是不是线程安全的。 对于一些常见的批处理用例,使用多线程步骤有一些实际的限制。一个步骤中的许多参与者(例如,读取器和写入器)都是有状态的,如果状态不按线程隔离,那么这些组件在多线程步骤中是不可用的。特别是,Spring Batch中的大多数现成阅读器和编写器都不是为多线程使用而设计的。但是,可以使用无状态或线程安全的读取器和写入器,并且Sp

  • 我有一个批处理步骤 读取器和处理器流程如何工作?读取器是读取块并等待处理器处理它,还是一次读取所有块。

  • 我刚开始使用Spring批处理,我有一个特殊问题。我希望使用从3个不同的jpa查询中获取结果,并分别处理它们,然后使用将它们写入一个统一的XML文件。 对于eg,生成的XML看起来像是,

  • 我使用的是spring批处理,和通常使用的一样,我有读取器、处理器和写入器。 我有两个问题 1>Reader查询所有200条记录(表中记录总大小为200,我给出了pageSize=200),因此它得到所有200条记录,在处理器中,我们需要所有这些记录的列表,因为我们必须将每个记录与其他199条记录进行比较,以便将它们分组在不同的层中。因此我在想,如果我们能在处理步骤中得到那个列表,我就可以操纵它们