Spring Batch-如何在处理器中同时处理多条记录? [英] Spring Batch-How to process multiple records at the same time in the processor?

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

问题描述

我有一个文件要分析和处理其中的记录。它以逐行方式工作得很好(一次解析一条记录)。我的要求是,我必须解析多行并从每条记录中获取所需的信息,然后在组合从所有记录中获取的信息之后,我调用一个服务来执行业务逻辑。我必须在我的处理器类中执行此逻辑。数据如下例所示:

001 123456 987654321551580韦恩DR 1

001 123456 987654321552APT 7861

001 123456 987654321553LOS ANGELES 1

001 123456 987654321554CA 1

001 123456 98765432155590001 1

列30-32中可用的数据元素是我希望从每条记录中提取的数据元素。在上述示例中,每行中的值分别为551、552、553、554、555。他们都是在档案里一起进来的。所以基本上,当我的处理器中的当前项解析第一行并发现它是‘551’(在业务代码中意味着地址行1)时,我想获取该行后面的地址的睡觉,并将它们保存在一个完整的地址中。最后,我希望将此地址从处理器传递给服务类,然后继续解析文件中的下一个可用记录。我的问题是处理器为每条记录逐行工作,这样我就不能跟踪/关联所有这些相关行。 如果我不能用更简单的方式解释我的问题,很抱歉。我是Spring Batch的新手,还在学习。

推荐答案

如果您知道关联的数据记录将在文件中挨着(而不是随机分布),则可以利用SingleItemPeekableItemReader关联多行来创建一个完整的对象。此older answer包含更多信息。

示例上下文文件:

<bean id="peekingReader" class="com.package.whatever.YourPeekingReader">
    <property name="delegate" ref="flatFileItemReader"/>
</bean>

<bean id="flatFileItemReader" class="org.springframework.batch.item.file.FlatFileItemReader">
    <property name="resource" value="file://temp/file.txt" />
    <property name="lineMapper">
        <bean class="org.springframework.batch.item.file.mapping.DefaultLineMapper">
            <property name="lineTokenizer" ref="yourTokenizer"/>
            <property name="fieldSetMapper" ref="yourMapper"/>
        </bean>
    </property>
</bean>

偷看阅读器示例:

public class YourPeekingReader extends SingleItemPeekableItemReader<YourObject> {

    @Override
    public YourObject read() {

        YourObject item = super.read();

        if (item == null) {
            return null;
        }

        while (true) {
            YourObject possibleRelatedObject = peek();
            if (possibleRelatedObject == null) {
                return item;
            }

            //logic to determine if next line in file relates to same object
            boolean matches = false; 

            if (matches) {
                item.addRelatedInfo(super.read());
            } else {
                return item;
            }
        }


    }

}

这篇关于Spring Batch-如何在处理器中同时处理多条记录?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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