Spring Batch分解现有大型ItemReader的正确方法

时间:2019-02-21 16:19:41

标签: spring spring-batch

我目前正在考虑重构现有的Spring Batch作业。

但是,阅读器似乎在处理太多数据。

当前已读

  • 转到外部服务以获取对象列表
  • 使用此列表转到其他服务来填充地图
  • 然后使用此地图两次查询其他服务
  • 使用结果创建用于写入CSV的对象

我认为这会妨碍春季批处理有效地分批完成工作的能力吗?

我相信更好的方法是让只读操作完成上述第一步,然后再由复合处理器处理其他步骤。

这是处理这项工作的最佳方法,还是有一种更聪明的方法来使用多个步骤或多次读取来处理此用例?

1 个答案:

答案 0 :(得分:2)

您是正确的,因为ItemReader(根据您的描述)可能做得太多。驾驶查询模式将在此处应用,并指示您想从ItemReader返回项目,然后使用ItemProcessor来丰富或转换它们。您可能需要进行一些汇总以处理调用其他远程服务对性能的影响,但是您可以在不将所有逻辑都耦合到ItemReader的情况下进行处理。

您可以在以下文档中了解有关驾驶查询模式的更多信息:https://docs.spring.io/spring-batch/trunk/reference/html/patterns.html#drivingQueryBasedItemReaders