3

以下是我的春季批次用例。

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

  2. 处理记录。

  3. 将处理后的记录一一写入。

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

4

1 回答 1

8

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

您的 ItemReader 需要在此集合上循环并一个接一个地删除项目,然后在它们全部处理后返回 null。

@Kik 所说的是其余部分由 Spring 批处理根据您的提交间隔处理。例如,如果您的 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 的私有属性中

问候

于 2013-05-15T18:47:40.230 回答