Ich bin Umsetzung Multi-Line Aufzeichnungen Reader Lösung auf Basis von https://docs.spring.io/spring-batch/reference/html/patterns.html#multiLineRecordsMulti-Line Aufzeichnungen Reader (wenn Start prefix = Ende Präfix)
Ich habe folgende flache Datei:
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 (und optional NCU, BAD) muss in ein einzelnes Objekt konvertiert werden.
In meinem Fall habe ich jedoch keine "End" -Zeile, also "HEA" ist ein Anfang des neuen Elements und gleichzeitig das Ende des vorherigen.
Dank Dean Clark für den guten Vorschlag unten. Dies ist Java-Config der Lösung:
@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;
}
dann in den benutzerdefinierten MultiLineCaseItemReader
Ihre beide read()
und peek()
tun können
Danke Dean! Genau das habe ich gesucht. Wundern, warum Frühling Batch-Referenzführer hat nichts über SingleItemPeekableItemReader ... – mirrow
Dean, würden Sie bitte den Satz ändern "Wenn es die nächste" Überschrift "Zeile ist, dann das Element, das Sie arbeiten." weil es klingt, als ob einige Wörter fehlen :) – anton1980