Spring Batch:一次处理多条记录 [英] Spring batch: processing multiple record at once

查看:18
本文介绍了Spring Batch:一次处理多条记录的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用的是Spring Batch,和往常一样,我有阅读器、处理器和写入器。

我有两个问题

1> 读取器查询所有200条记录(表中的总记录大小是200,我给出了pageSize=200),因此它得到了所有200条记录,而在处理器中,我们需要所有这些记录的列表,因为我们必须将每条记录与其他199条记录进行比较,以便将它们分组到不同的层中。 因此,我在想,如果我们可以在处理步骤中获得该列表,我就可以对它们进行操作。我应该如何处理。

2> 在处理阶段,我需要数据库中的一些主数据,这取决于要处理的所有输入记录。我考虑在处理Bean中注入数据源,获取所有主表数据并处理所有记录。这是一种好的方法吗?或者请提出不同的建议。

<job id="sampleJob">
    <step id="step1">
        <tasklet>
            <chunk reader="itemReader" processor="processor" writer="itemWriter" commit-interval="20"/>
        </tasklet>
    </step>
</job>

并且处理器是

@Override
public User process(Object item) throws Exception {
    // transform item to user
    return user;
}

我想要

public List<User> process(List<Object> item) throws Exception {
    // transform item to user
    return user;
}

我找到一些帖子here,但是他们说要在Writer中获取列表。但是我不喜欢在Writer中处理任何东西,因为这会扼杀Writer和Processor的定义。是否有任何配置可在此进程方法内获取列表。

谢谢

推荐答案

由于ItemProcessor接收您从ItemReader返回的任何内容,因此您需要您的ItemReader返回List。该List实际上是您正在处理的"项"。Spring Batch示例中有一个这样的示例。AggregateItemReader从委托ItemReader读取所有项,并将它们作为单个列表返回。您可以在Github上查看:https://github.com/spring-projects/spring-batch/blob/master/spring-batch-samples/src/main/java/org/springframework/batch/sample/domain/multiline/AggregateItemReader.java

这篇关于Spring Batch:一次处理多条记录的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆