每条记录行数可变的Spring-Batch多行记录项写入器 [英] Spring-Batch Multi-line record Item Writer with variable number of lines per record

查看:17
本文介绍了每条记录行数可变的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.xmlMultiLineTradeItemWriter

这基本上是通常的委托原则,您只需要一个适当的域对象,可能包含这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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆