首页 > 解决方案 > MultiResourceItemReader - 如果标题无效,则跳过整个文件

问题描述

我的 Spring Batch 作业读取csv包含两种类型标头的文件列表。如果文件的标题与两种可能的标题类型之一不匹配,我希望读者跳过整个文件。

我看过Spring Boot 批处理 - MultiResourceItemReader : move to next file on error。但我看不到如何验证标头令牌以确保它们在计数和内容上匹配

标签: javaspring-batch

解决方案


我能够通过执行以下操作来解决这个问题,

public FlatFileItemReader<RawFile> reader() {
    return new FlatFileItemReaderBuilder<RawFile>()
            .skippedLinesCallback(line -> {
                // Verify file header is what we expect
                if (!StringUtils.equals(line, header)) {
                    throw new IllegalArgumentException(String.format("Bad header!", line));
                }
            })
            .name( "myReader" )
            .linesToSkip( 1 )
            .lineMapper( new DefaultLineMapper() {
                {
                    setLineTokenizer( lineTokenizer );
                    setFieldSetMapper( fieldSetMapper );
                }} )
            .build();
}

reader()在我的MultiResourceItemReader.

请注意headerlineTokenizerfieldSetMapper都是我设置的变量,具体取决于我的作业预期读取的文件类型(以及相应的标题集)。


推荐阅读