每条记录行数可变的Spring-Batch多行记录项写入器 [英] Spring-Batch Multi-line record Item Writer with variable number of lines per record
本文介绍了每条记录行数可变的Spring-Batch多行记录项写入器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下要求,但无法决定采取哪种方法:
我需要将数据写入固定格式的输出文件,其中每条记录跨越多行,如下所示:
000120992599999990000000000000009291100000000000000000000000010000
000000000000000000000006050052570009700000050000990494920000111100
ABCDE:WXYZ 0200
descriptiongoesheredescriptiongoesheredescriptiongoesher0200
descriptiongoesheredescriptiongoesheredescriptiongoesher0200
descriptiongoesheredescriptiongoesheredescriptiongoesher0200
descriptiongoesheredescriptiongoesheredescriptiongoesher0200
000000000000000000000006050052730005700001100000090494920000221200
ABCDE:WXYZ 0200
descriptiongoesheredescriptiongoesheredescriptiongoesher0200
descriptiongoesheredescriptiongoesheredescriptiongoesher0200
000000000000000000000006050113110009700000000000000494920000311100
ABCDE:WXYZ 0200
descriptiongoesheredescriptiongoesheredescriptiongoesher0200
descriptiongoesheredescriptiongoesheredescriptiongoesher0200
descriptiongoesheredescriptiongoesheredescriptiongoesher0200
000012099259999999000000000000000929110000000000000000000000001000
这是上例中的一条记录:
000000000000000000000006050052570009700000050000990494920000111100
ABCDE:WXYZ 0200
descriptiongoesheredescriptiongoesheredescriptiongoesher0200
descriptiongoesheredescriptiongoesheredescriptiongoesher0200
descriptiongoesheredescriptiongoesheredescriptiongoesher0200
descriptiongoesheredescriptiongoesheredescriptiongoesher0200
第一行和最后一行分别为页眉和页脚。 每条记录的第一行包含几个详细信息。 第二行有一些带有空格的其他详细信息。
我有一个很长的描述字段,我需要将其分成56个字符部分,并在这些部分后面加上记录的第三行。
因此,在某些记录中,这可能只有一行,而在某些记录中,可能也有三行。
我需要有关如何在上述方案中设计我的项目写入器的指导。
尼克
推荐答案
官方spring-batch-samples有一个多行记录写入器示例,搜索multiline.xml
和MultiLineTradeItemWriter
这基本上是通常的委托原则,您只需要一个适当的域对象,可能包含这1..n个中间行的列表
public class MultiLineTradeItemWriter implements ItemWriter<Trade>, ItemStream {
private FlatFileItemWriter<String> delegate;
public void write(List<? extends Trade> items) throws Exception {
List<String> lines = new ArrayList<String>();
for (Trade t : items) {
lines.add("BEGIN");
lines.add("INFO," + t.getIsin() + "," + t.getCustomer());
lines.add("AMNT," + t.getQuantity() + "," + t.getPrice());
lines.add("END");
}
this.delegate.write(lines);
}
}
这篇关于每条记录行数可变的Spring-Batch多行记录项写入器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文