解析多格式&弹簧批处理作业中的多行数据文件

时间:2018-01-30 00:05:00

标签: spring spring-boot spring-batch

我正在编写一个Spring批处理作业来处理下面提到的数据文件并将其写入db。

  • 示例数据文件是这种格式,我有多个标题和 每个标题都有一堆与之关联的行。
  • 每个标题我可以有数百万条记录,我可以有n个数字 正在处理的平面文件中的标头。我的要求是 选择一些关注的读者。
  • 对于所有选中的读者,我需要选择所有数据行。每个 标题和它的数据格式也不同。我可以接收任何一个 这些数据在我的处理器中,需要将它们写入我的数据库。

HDR01

A | 41 | 57 | Data1 | S | 62 | Data2 | 9 | N | 2017-02-01 18:01:05 | 2017-02-01 00:00:00 A | 41 | 57 | Data1 | S | 62 | Data2 | 9 | N | 2017-02-01 18:01:05 | 2017-02-01 00:00:00

HDR02

A | 41 | 57 |数据1 | S | 62 |数据2 | 9 | N | A | 41 | 57 |数据1 | S | 62 |数据2 | 9 | N |

  • 我尽力探索PatternMatchingCompositeLineMapper 将我拥有的不同标题模式映射到tokenizer和 相应的FieldSetMapper,但我需要读取正文而不是 标题在这里。
  • 克里特岛也没有任何页脚作为我自己的终端政策。
  • 也尝试使用AggregateItemReader,但不想俱乐部所有 我处理之前的标题记录。
  • 对应标题的每一行都应该并行处理。

    @Bean public LineMapper myLineMapper(){

    PatternMatchingCompositeLineMapper< Domain > mapper = new PatternMatchingCompositeLineMapper<>();
    final Map<String, LineTokenizer> tokenizers = new HashMap<String, LineTokenizer>();
    tokenizers.put("* HDR01*", new DelimitedLineTokenizer());
    tokenizers.put("*HDR02*", new DelimitedLineTokenizer());
    tokenizers.put("*", new DelimitedLineTokenizer("|"));
    mapper.setTokenizers(tokenizers);
    
    Map<String, FieldSetMapper<VMSFeedStyleInfo>> mappers = new HashMap<String, FieldSetMapper<VMSFeedStyleInfo>>();
    try {
        mappers.put("* HDR01*", customMapper());
        mappers.put("*HDR02*", customMapper());
        mappers.put("*", customMapper() );
    } catch (Exception e) {
        e.printStackTrace();
    }
    mapper.setFieldSetMappers(mappers);
    
    return mapper;
    

    }

有人可以帮我提供一些关于如何实现这一目标的意见。

0 个答案:

没有答案