【发布时间】:2013-05-15 14:02:35
【问题描述】:
以下是我的 Spring Batch 用例。
从 Web 服务读取输入。 Web 服务将返回所有记录。
处理记录。
将处理后的记录一一写入。
我很清楚第 2 步和第 3 步,但无法弄清楚如何实现一个可以一次性读取所有记录的阅读器。如何将记录一一传递给项目处理器/作者? 我应该使用 tasklet 而不是读写器吗?
【问题讨论】:
标签: spring-batch
以下是我的 Spring Batch 用例。
从 Web 服务读取输入。 Web 服务将返回所有记录。
处理记录。
将处理后的记录一一写入。
我很清楚第 2 步和第 3 步,但无法弄清楚如何实现一个可以一次性读取所有记录的阅读器。如何将记录一一传递给项目处理器/作者? 我应该使用 tasklet 而不是读写器吗?
【问题讨论】:
标签: spring-batch
您的 WebService 将返回什么?我猜是对象的集合!
您的 ItemReader 需要在此集合上循环并逐个删除项目,然后在它们全部处理完毕后返回 null。
@Kik 所说的是其余部分由 Spring 批处理根据您的提交间隔处理。例如,如果您的 commit0interval 为 10,您的读者将阅读 10 个项目,将这 10 个项目传递给 ItemProc。然后再次将它们传递给作者。
希望澄清
编辑:1) 在 Spring Batch 中,您有多个选项来做您需要的事情。
Easy Option,创建一个自定义 MyWsItemReader 实现 ItemReader 接口。
-在这个类中定义一个方法 init(),它将调用你的 webService 并将结果放入 MyWsItemReader 的集合属性中。
- 从接口实现方法 read()。 (仔细阅读文档中的联系人 - 传递集合的所有元素时必须返回 null)
-然后,围绕步骤配置一个 stepListener 并实现 beforeStep() 方法来调用 MyWsItemReader 的 init()。您可以在侦听器中自动连接阅读器来完成此操作。
另外,您的 MyWsItemReader 也可以实现 InitializingBean。那么你必须实现 afterPropertySet() ,你可以在其中调用 ws 并将结果存储在 MyWsItemReader 的私有属性中
问候
【讨论】: