Java Spring MultiLineItemReader读取具有多个相同类型记录的复杂文件

时间:2016-05-17 08:26:55

标签: java spring-batch

我是Spring新手并尝试在Spring批处理中使用FlatFileItemReader读取复杂文件。输入文件的结构如下。下面的示例是一个记录,文件有很多这样的记录。以H开头的行是标题记录,F是页脚记录。在它们之间有10500,10501,405,505类型的交易记录。我能够使用MultiLineItemReader读取此文件。

我创建了FieldSetMapperTokenizer并能够解析文件并进入各个字段。我面临的唯一问题是,对于记录类型10500和10501,它们可以在页眉和页脚之间多次出现,当我正在读取文件时,我只是获取最后的读取值,而之前的记录只是没有出现在阅读中。我知道我做的事情很傻但却无法理解。有没有人有阅读此类文件的经验。

H00025888222    444233DD            33232323232

105000000             0000                    0

10501                  1                2222222

105000000             0000                    1

10501                  1                 2222223

40500                                     1222222

50500                                          21
F00555              5555                        0

1 个答案:

答案 0 :(得分:0)

如果你只有多种类型的线条,但这些线条都是独立的,那么PatternMatchingCompositeLineMapper可能是您正在寻找的。

<bean id="itemReader" class="org.springframework.batch.item.file.FlatFileItemReader" scope="step">
    <property name="resource" value="#{jobParameters['input.file']}" />
    <property name="lineMapper" ref="patternMatchingMapper" />
    <property name="strict" value="true" />
</bean>

<bean id="patternMatchingMapper" class="org.springframework.batch.item.file.mapping.PatternMatchingCompositeLineMapper">
    <property name="tokenizers">
        <map>
            <entry key="LINEA*" value-ref="tokenizerA" />
            <entry key="LINEB*" value-ref="tokenizerB" />
        </map>
    </property>
    <property name="fieldSetMappers">
        <map>
            <entry key="*" value-ref="beanWrapperFieldSetMapper" />
        </map>
    </property>
</bean>

如果它们相关(需要组合多行来制作一个对象,请考虑SingleItemPeekableItemReaderdescribed briefly here)。