【问题标题】:Process cobol flat feed file (with different format) using spring batch使用 Spring Batch 处理 cobol flat feed 文件(具有不同格式)
【发布时间】:2020-02-18 17:42:51
【问题描述】:

我正在尝试使用 Spring Batch 来使用由 cobol 程序生成的数据。让我们假设以下是数据。

CBMWM3    COU**********EA40176
CBMWM5    CON**********G114738
SMERGLS4507BLU**********F231353
TFORF150  5*******G539501

根据第一个字符,文件中有三种不同的格式。

C - MAKE, MODEL, CLASSIFICATION, VIN
S - MAKE, MODEL, PASS CAPACITY, COLOR, VIN
T - MAKE, MODEL, PASS CAPACITY, VIN

我想使用 FlatFileItemReader,它最适合单一格式。如何更新代码以处理同一文件上的不同格式? 我正在为这个批处理作业使用 Spring Boot。

编辑 1:

@Bean
    public FlatFileItemReader<CarDetails> reader() {
        return new FlatFileItemReaderBuilder<CarDetails>()
                .name("carDetailsReader")
                .resource(new FileSystemResource("/path/to/inputFile"))
                .fixedLength()
                    .addColumns(new Range(1))

                    /* Format for lines starting with C
                    .addColumns(new Range(2,4))
                    .addColumns(new Range(5,9))
                    .addColumns(new Range(10,12))
                    .addColumns(new Range(13,29)) */

                    /* Format for lines starting with S
                    .addColumns(new Range(2,4))
                    .addColumns(new Range(5,9))
                    .addColumns(new Range(9,10))
                    .addColumns(new Range(11,13))
                    .addColumns(new Range(14,30)) */

                    /* Format for lines starting with T
                    .addColumns(new Range(2,4))
                    .addColumns(new Range(5,9))
                    .addColumns(new Range(9,10))
                    .addColumns(new Range(11,26)) * /

                 // Looks like I cant have all three formats here. 

                .names(new String[]{"Char", "make", "model", "Clasification", "VIN"})
                // Need some facility to accept multiple formats in names too. 

                .fieldSetMapper(new BeanWrapperFieldSetMapper<>() {{
                    setTargetType(CarDetails.class);
                }})
                .build();
    }

【问题讨论】:

  • 问题/问题是什么?到目前为止,您尝试过什么?
  • 我尝试创建一个批处理,它适用于一种格式。但是我必须修改 reader() 以接受不同的格式....类似于我对帖子所做的编辑。

标签: spring-boot spring-batch


【解决方案1】:

PatternMatchingCompositeLineMapper 是您正在寻找的。它允许您根据模式匹配行并将每个行类型标记/映射到相应的域类型。

你可以找到一个如何使用它的例子here

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-09
  • 2020-04-27
  • 2016-06-29
  • 2012-05-23
  • 2014-02-19
相关资源
最近更新 更多