Spring batch 如何在ItemReader中读取多个项目

Spring batch 如何在ItemReader中读取多个项目,spring-batch,Spring Batch,下面是我的spring批处理用例 从web服务读取输入。Web服务将返回所有记录 处理记录 逐个写入处理过的记录 我很清楚第2步和第3步的内容,但不知道如何实现一个可以一次性读取所有记录的读卡器。如何将记录逐一传递给项目处理者/编写者? 我应该使用tasklet而不是读写器吗 您的Web服务将返回什么?我猜是一堆东西 您的ItemReader需要在此集合上循环并逐个删除项,然后在处理完所有项后返回null @Kik所说的是,其余部分由Spring批处理根据您的提交间隔来处理。例如,如果commi

下面是我的spring批处理用例

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

  • 处理记录

  • 逐个写入处理过的记录

  • 我很清楚第2步和第3步的内容,但不知道如何实现一个可以一次性读取所有记录的读卡器。如何将记录逐一传递给项目处理者/编写者?
    我应该使用tasklet而不是读写器吗

    您的Web服务将返回什么?我猜是一堆东西

    您的ItemReader需要在此集合上循环并逐个删除项,然后在处理完所有项后返回null

    @Kik所说的是,其余部分由Spring批处理根据您的提交间隔来处理。例如,如果commit0interval为10,则读取器将读取10项,并将这10项传递给ItemProc。然后再把它们传给作者

    希望澄清

    编辑:1)在SpringBatch中,您有多个选项来执行所需操作

    简单选项,创建一个实现ItemReader接口的自定义MyWsItemReader

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

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

    -然后,围绕该步骤配置一个stepListener,并实现beforeStep()方法来调用MyWsItemReader的init()。您可以在侦听器中自动连接读取器以完成此操作

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


    问候

    谢谢你的回答。但是我没有明白。我不太喜欢春天。我的理解是读卡器被多次调用,准备对象列表,并将其传递给处理器/编写器。所以我的问题…很抱歉我不能写完整的评论。谢谢你的回答。但我没有明白。我不太喜欢春天。我的理解是,读卡器被多次调用,准备对象列表并将其传递给处理器/编写器。所以我的问题1.我应该在哪里打电话到web服务?即使我在reader中创建了它,如何将该列表传递给编写者和处理者?任何样品都会很有帮助。。。2.我应该使用tasklet调用web服务调用吗?如果是,我应该如何将我的项目传递给读者和作者?如果我使用tasklet,我的作业将包括两个步骤。请参阅编辑。首先,必须使用对象集合(从Jdbc调用、Xml、平面文件等映射)初始化读卡器。这是一次。然后,read()方法由chunk config中的提交间隔定义的chunk调用。每个区块都将被读取,然后通过SpringBatch自动传递给ItemProcessor、ItemWriter。。。。您无需为此编写任何代码,这都在步骤配置中。谢谢您的帮助。我看到了spring批处理阅读器代码。非常感谢您的帮助。与其在beforeStep()或afterPropertySet()中调用init(),为什么不在open()期间实现ItemStream并调用init(),这更合适,而且它还正确地支持可重启性。