将大型集合传递给Spring Batch Step的最佳方法是什么?

时间:2014-01-07 15:22:28

标签: spring spring-batch

Use case:

  1. 一次性读取数据集X(从数据库)到集合C. [集合大小可以说是5000]
  2. 使用Collection C处理/丰富Spring Batch Step中的项目(比如enrichStep)
  3. 如果C远大于可以通过ExecutionContext传递的内容,那么我们怎样才能在enrichStep的ItemProcessor中使它?

1 个答案:

答案 0 :(得分:1)

enrichStep添加StepExecutionListener.beforeStep并将您的大集合加载到HugeCollectionBeanHolder bean中。
通过这种方式,您只需加载一次收集(当步骤启动或重新启动时),而不会将其持久保存到执行上下文中。 在您的富集处理器中连接HugeCollectionBeanHolder以访问大量集合。​​

class HugeCollectionBeanHolder {
 Collection<Item> hudeCollection;

 void setHugeCollection(Collection<Item> c) { this.hugeCollection = c;}
 Collection<Item> getHugeCollection() { return this.hugeCollection;}
}

class MyProcessor implements ItemProcessor<Input,Output> {
 HugeCollectionBeanHolder hcbh;

 void setHugeCollectionBeanHolder(HugeCollectionBeanHolder bean) { this.hcbh = bean;}

 // other methods...
}

您还可以查看Spring Batch: what is the best way to use, the data retrieved in one TaskletStep, in the processing of another step