我基于https://docs.spring.io/spring-batch/reference/html/patterns.html#multiLineRecords多行记录阅读器(在启动时PREFIX =结束前缀)
我有以下的平面文件实现多行记录读卡器解决方案:
HEA;0013100345;2007-02-15
NCU;Smith;Peter;;T;20014539;F
BAD;;Oak Street 31/A;;Small Town;00235;IL;US
HEA;0013100345;2007-02-15
NCU;Smith;Peter;;T;20014539;F
HEA;0013100345;2007-02-15
HEA(和可选NCU,BAD)必须转换为单个对象。
但在我的情况下,我没有“结束”行,所以“HEA”是新项目的开始和前一个结尾的同时。
感谢Dean Clark给出了下面的建议。这是解决方案的Java的配置:
@Bean
public FlatFileItemReader<FieldSet> readerFlat() {
FlatFileItemReader<FieldSet> reader = new FlatFileItemReader<>();
reader.setResource(new ClassPathResource("multirecord.txt"));
reader.setLineMapper(compositeLineMapper());
return reader;
}
@Bean
public SingleItemPeekableItemReader<FieldSet> readerPeek() {
SingleItemPeekableItemReader<FieldSet> reader = new SingleItemPeekableItemReader<FieldSet>() {{
setDelegate(readerFlat());
}};
return reader;
}
@Bean
public MultiLineCaseItemReader readerMultirecord() {
MultiLineCaseItemReader multiReader = new MultiLineCaseItemReader() {{
setDelegate(readerPeek());
}};
return multiReader;
}
然后在自定义MultiLineCaseItemReader
你都可以做read()
和peek()
谢谢Dean!这正是我所期待的。想知道,为什么春季批参考指南与SingleItemPeekableItemReader没有任何关系...... – mirrow
院长,你会好好修改这句话:“如果它是下一个”标题“行,那么你正在工作的项目。因为这听起来像一些词是错过:) – anton1980