Java spring批处理:不正确的TokenCountException

Java spring批处理:不正确的TokenCountException,java,spring-boot,spring-batch,Java,Spring Boot,Spring Batch,我有一个平面文件,.csv文件,它有五个字段。如果这五个字段都存在,则文件处理效果良好。但是如果错误地输入了5个字段,如下所示 d、e、f、g、h a、 b,c d、 e、f、g、h 程序崩溃了。我想继续读到下一行 错误为org.springframework.batch.item.file.transform.IncorrectTokenCountException:在记录中找到的令牌数量不正确 下面是代码 我如何继续读到第三行?我希望第一行读,第二行跳过,第三行读 FlatFileItemR

我有一个平面文件,.csv文件,它有五个字段。如果这五个字段都存在,则文件处理效果良好。但是如果错误地输入了5个字段,如下所示

d、e、f、g、h
a、 b,c
d、 e、f、g、h

程序崩溃了。我想继续读到下一行

错误为
org.springframework.batch.item.file.transform.IncorrectTokenCountException:在记录中找到的令牌数量不正确

下面是代码

我如何继续读到第三行?我希望第一行读,第二行跳过,第三行读

FlatFileItemReader<CustomerBatch> reader = new FlatFileItemReader<>();
DelimitedLineTokenizer delimitedTokeniser = new DelimitedLineTokenizer();
delimitedTokeniser.setNames(new String[]{ "a", "b","c","d","e" });
DefaultLineMapper<CustomerBatch> lineMapper = new DefaultLineMapper<CustomerBatch>();
lineMapper.setLineTokenizer(delimitedTokeniser);
lineMapper.setFieldSetMapper(new BeanWrapperFieldSetMapper<CustomerBatch>() {{setTargetType(CustomerBatch.class);}});
ByteArrayResource y= new ByteArrayResource(batchFile.getBytes());
reader.setResource(y);
reader.setLineMapper(lineMapper);
reader.setLinesToSkip(1); //do not read the first line of the csv file.
reader.open(new ExecutionContext());

try {
        while ((newCustomerBatch = reader.read()) != null) {
        System.out.println("name:"+newCustomerBatch.getName());
        //some logic.
        }
    }catch(Exception e) {

    }
}
FlatFileItemReader=新的FlatFileItemReader();
DelimitedLineTokenizer delimitedTokeniser=新的DelimitedLineTokenizer();
delimitedTokeniser.setNames(新字符串[]{“a”、“b”、“c”、“d”、“e”});
DefaultLineMapper lineMapper=新的DefaultLineMapper();
lineMapper.setLineTokenizer(delimitedTokeniser);
lineMapper.setFieldSetMapper(新的beanwrapperfiedsetmapper(){{{setTargetType(CustomerBatch.class);}});
ByteArrayResource y=新的ByteArrayResource(batchFile.getBytes());
reader.setResource(y);
reader.setLineMapper(lineMapper);
reader.setLinesToSkip(1)//不要读取csv文件的第一行。
reader.open(新的ExecutionContext());
试一试{
while((newCustomerBatch=reader.read())!=null){
System.out.println(“名称:+newCustomerBatch.getName());
//有些逻辑。
}
}捕获(例外e){
}
}

您有一个名为SkippPolicy的功能,它可以处理在批处理失败之前您愿意容忍的异常数量

您应该实现Skipplocy接口:

@Override
    public boolean shouldSkip(Throwable exception, int skipCount) throws SkipLimitExceededException {
        if (exception instanceof FileNotFoundException) {
            return false;
        } else if (exception instanceof FlatFileParseException && skipCount <= 5) {
            FlatFileParseException ffpe = (FlatFileParseException) exception;
            StringBuilder errorMessage = new StringBuilder();
            errorMessage.append("An error occured while processing the " + ffpe.getLineNumber()
                    + " line of the file. Below was the faulty " + "input.\n");
            errorMessage.append(ffpe.getInput() + "\n");
            logger.error("{}", errorMessage.toString());
            return true;
        } else {
            return false;
        }
    }
@覆盖
公共布尔值shouldSkip(Throwable exception,int skipCount)抛出SkipLimitExceedeException{
if(FileNotFoundException的异常实例){
返回false;

}else if(FlatFileParseException&&skipCount异常实例)谢谢!我如何将其集成到我的上述代码中?检查