Spring批处理-读取文件,数据跨越多行,具有不同的格式



我有一个从输入文件(分隔符)中读取的作业,其中我有不同记录类型的行:如果记录type = A我想映射到object ObjectA,如果记录type = B我想映射到ObjectBObjectA有一个属性,它是ObjectB的列表。在我的输入文件中,一条记录type A后面跟着几条记录type B:

> AS;1111111;A;otherinfo
S;11111;B;otherinfo;otherinfo1;otherinfo2
S;11111;B;otherinfo;otherinfo1;otherinfo2
AT;1111112;A;otherinfo
S;11112;B;otherinfo;otherinfo1;otherinfo2
S;11112;B;otherinfo;otherinfo1;otherinfo2

我的阅读器的每个返回项必须是ObjectA

我使用PatternMatchingCompositeLineMapper作为lineMapper实现了FlatFileItemReader。最后一个有一个list of (2) LineTokenizer和一个list of (2) FieldSetMapper,对于输入文件中的每种类型的行都有特定的匹配。

这个很好。

现在,为了返回ObjectA类型的每个项目与ObjectB的相关列表,我试图实现一个自定义的SingleItemPeekableItemReader,我上面的读者应该委托给…但我不知道如何管理peek()应该return ObjectAObjectB基于记录类型的事实。逻辑将是:if peek() returns ObjectA,它是一个新项目,因此返回当前,if peek() returns ObjectB,这与当前项目相关,因此read()add ObjectB实例到当前项目中ObjectB的列表。

对于如何实现这个多行阅读器有什么建议吗?也许正确的方法是这里描述的多行记录,而不是使用SingleItemPeekableItemReader?

您的需求是非常具体的,因为它结合了一个项目跨越多行,同时读者可以返回不同类型的项目。

我没有看到一个明显的方法来做什么Spring Batch提供开箱即用(除了使用PatternMatchingCompositeLineMapperSingleItemPeekableItemReader,但这似乎不适合你根据你的描述)。因此,您需要一个自定义的ItemReader,类似于本节中描述的:Multi-Line Records。

最新更新