我是Spring新手并尝试在Spring批处理中使用FlatFileItemReader
读取复杂文件。输入文件的结构如下。下面的示例是一个记录,文件有很多这样的记录。以H开头的行是标题记录,F是页脚记录。在它们之间有10500,10501,405,505类型的交易记录。我能够使用MultiLineItemReader
读取此文件。
我创建了FieldSetMapper
和Tokenizer
并能够解析文件并进入各个字段。我面临的唯一问题是,对于记录类型10500和10501,它们可以在页眉和页脚之间多次出现,当我正在读取文件时,我只是获取最后的读取值,而之前的记录只是没有出现在阅读中。我知道我做的事情很傻但却无法理解。有没有人有阅读此类文件的经验。
H00025888222 444233DD 33232323232
105000000 0000 0
10501 1 2222222
105000000 0000 1
10501 1 2222223
40500 1222222
50500 21
F00555 5555 0
答案 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>
如果它们相关(需要组合多行来制作一个对象,请考虑SingleItemPeekableItemReader
,described briefly here)。