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

用于频繁修改源的Spring批处理读取器

薛淮晨
2023-03-14

我使用的是spring batch,我想写一份工作,在那里我有一个JPA阅读器,可以从数据库中选择分页的产品集。然后我有一个处理器,它将对每个产品执行一些操作(比如对产品a),但对产品a执行此操作时,项目处理器也将处理其他一些产品(如产品B、产品C,等等)。然后处理器将进入productB,因为它是由读者给出的。但它已经被处理过了,所以再次处理它实际上是浪费时间/资源。人们应该如何解决这个问题——spring batch中是否有一个支持修改的条目阅读器?一种解决方案是在项目处理器中检查产品是否已经处理,只有在产品尚未处理时,才进行处理。然而,检查产品是否经过加工实际上非常耗费资源。

共有1个答案

潘智刚
2023-03-14

我会考虑以下两种方法:

  1. 调整您所称的“项目”-项目是从读取器返回的内容。根据事物的设计,您可能希望构建一个更复杂的读取器,该读取器可以包含依赖项,因此只能循环一次。显然,这取决于您的特定用例
  2. 使用过程指示器模式——过程指示器模式就是它的用途。在处理项目时,在数据库中设置一个标志,指示它们已被处理。然后,将读者的查询配置为仅读取已处理的查询(过滤掉通过处理阶段更新的查询)
 类似资料:
  • 我正在使用JpaPagingItemReaderBuilder查询一个DB,结果被插入到另一个DB中。 查询返回的结果没有任何问题,但我得到了一个错误与读取器的返回,在处理器中,您可以检查我的编码和错误下面。 有谁能给我一点启示吗?为什么我不能处理结果?

  • 我知道匹配模式解析器,这是Spring批处理提供的。我需要关于如何构造批处理作业的帮助,以便它可以读取循环中的记录类型5和记录类型6。

  • 我正在尝试创建一个应用程序,该应用程序使用spring-batch-excel扩展名来读取用户通过web界面上传的Excel文件,以便解析Excel文件中的地址。 当代码运行时,没有错误,但我得到的只是我日志中的以下内容。即使我的处理器和Writer中都有log/syso(它们从未被调用过,我所能想象的是它没有正确读取文件,也没有返回要处理/写入的数据)。是的,这个文件有数据,实际上有几千条记录。

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

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

  • 如果我正在读写本地文件,那么对远程数据库服务器的更新相对昂贵。如果增加[chunk-size],内存使用量就会上升。 提交频率对编写本地文件并没有太大的影响,所以对我来说,元数据更新才是一个问题。该步骤是可重新启动的,因此从技术上讲,我不需要记录中间提交计数。 对于JobRepository,我可以只使用map或内存数据库,但我需要其他信息,例如持久化的开始/结束时间,而且这个问题只涉及一个步骤。