如何读取ItemReader中的多个项目

时间:2013-05-15 14:02:35

标签: spring-batch

以下是我的弹簧批用例。

  1. 从Web服务读取输入。 Web服务将返回所有记录。

  2. 处理记录。

  3. 逐个编写已处理的记录。

  4. 我清楚第2步和第3步,但无法弄清楚如何实现一次性读取所有记录的阅读器。如何将记录逐个传递给项目处理器/编写器? 我应该使用tasklet而不是读者/作者吗?

1 个答案:

答案 0 :(得分:7)

您的WebService将返回什么?我想是一个对象的集合!

您的ItemReader需要循环访问此集合并逐个删除项目,然后在全部处理完毕后返回null。

@Kik所说的是其余部分由Spring批处理根据你的commit-interval来处理。例如,如果你有一个commit0interval为10,你的读者将读取10个项目,将这10个项目传递给ItemProc。然后再把它们传给作家。

希望澄清

编辑:1)在Spring Batch中,您有多个选项可以执行您需要的操作。

Easy Option,创建一个实现ItemReader接口的自定义MyWsItemReader。

- 在此类中定义一个方法init(),该方法将调用您的webService并将结果放入MyWsItemReader的集合属性中。

- 从接口实现方法read()。 (仔细阅读文档中的联系人 - 当您传递集合的所有元素时,必须返回null)

- 然后,围绕该步骤配置stepListener并实现beforeStep()方法以调用MyWsItemReader的init()。您可以在监听器中自动装配读取器以实现此目的。

或者,您的MyWsItemReader也可以实现InitializingBean。然后你必须实现afterPropertySet(),你可以在其中调用ws并将结果存储在MyWsItemReader的私有属性中

问候