Spring-batch reader 用于经常修改的源
Spring-batch reader for frequently modified source
我正在使用 spring 批处理,我想编写一个作业,其中我有一个 JPA reader 从数据库中选择分页的产品集。然后我有一个处理器,它将对每个产品执行一些操作(比如对产品 A
),但是对产品 A
执行此操作,项目处理器也会处理其他一些产品(如产品B
、产品 C
,等等)。然后处理器将得出乘积 B
,因为它符合并由 reader 给出。但是已经处理过了,再处理其实是浪费了time/resources。应该如何实际解决这个问题 - spring 批次中是否有修改感知项 reader?一种解决方案是在项目处理器中检查产品是否已经过处理,只有在没有处理过的情况下才进行处理。但是检查产品是否已经过处理实际上是非常耗费资源的。
我会考虑两种方法:
- 调整您所说的 "item" - 项目是从 reader 返回的项目。根据事物的设计,您可能想要构建一个更复杂的 reader,它可以包含依赖项,因此只循环一次。显然,这 非常 取决于您的具体用例。
- 使用过程指示器模式 - 过程指示器模式就是它的用途。当您处理项目时,在数据库中设置一个标志,指示它们已被处理。然后,您的 reader 的查询被配置为仅读取已处理的查询(过滤掉那些通过处理阶段更新的查询)。
我正在使用 spring 批处理,我想编写一个作业,其中我有一个 JPA reader 从数据库中选择分页的产品集。然后我有一个处理器,它将对每个产品执行一些操作(比如对产品 A
),但是对产品 A
执行此操作,项目处理器也会处理其他一些产品(如产品B
、产品 C
,等等)。然后处理器将得出乘积 B
,因为它符合并由 reader 给出。但是已经处理过了,再处理其实是浪费了time/resources。应该如何实际解决这个问题 - spring 批次中是否有修改感知项 reader?一种解决方案是在项目处理器中检查产品是否已经过处理,只有在没有处理过的情况下才进行处理。但是检查产品是否已经过处理实际上是非常耗费资源的。
我会考虑两种方法:
- 调整您所说的 "item" - 项目是从 reader 返回的项目。根据事物的设计,您可能想要构建一个更复杂的 reader,它可以包含依赖项,因此只循环一次。显然,这 非常 取决于您的具体用例。
- 使用过程指示器模式 - 过程指示器模式就是它的用途。当您处理项目时,在数据库中设置一个标志,指示它们已被处理。然后,您的 reader 的查询被配置为仅读取已处理的查询(过滤掉那些通过处理阶段更新的查询)。