使用spring batch ItemReader

时间:2018-02-12 12:18:22

标签: java spring spring-batch

在我的春季批处理应用程序中,我已按如下方式配置FlatFileItemReader

public PositionRowReader() {

    reader = new FlatFileItemReader<>();

    reader.setLinesToSkip(1); //skip header row

    DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer(";");
    tokenizer.setStrict(false);
    tokenizer.setNames(PosFieldSetMapper.COLUMN_NAMES);

    DefaultLineMapper<PosRow> posLineMapper = new DefaultLineMapper<>();
    posLineMapper.setLineTokenizer(tokenizer);
    posLineMapper.setFieldSetMapper(new PosFieldSetMapper());
    posLineMapper.afterPropertiesSet();


    reader.setLineMapper(posLineMapper);

}

在我正在阅读的file中,我可以获得我不想处理的数据,例如:

20180123;ABC;00001;  
20180123;ABC;00001;
;;;
;;;

我想忽略带有;;;的行,换句话说,它们只是空的。有没有办法可以做到这一点?我也有FieldSetMapper

目前我遇到例外情况:

org.springframework.batch.item.file.FlatFileParseException: Parsing error at line: 2253 in resource=[file [...]], input=[;;;;;;;;]

1 个答案:

答案 0 :(得分:0)

我在FieldSetMapper上检查了空:

if (!fieldSet.readString("client").isEmpty()) {
        pos.setSedol(fieldSet.readString("client"));
    }

然后在ItemProcessor process()方法中,我检查值为Null:

  if (!line.isValid()) {
            return null;
        }