【问题标题】:How to retry Spring Batch FlatFileItemReader?如何重试 Spring Batch FlatFileItemReader?
【发布时间】:2019-04-03 19:21:53
【问题描述】:

我正在尝试重试 Spring Batch FlatFileItemReader 但没有成功。

    FlatFileItemReader<Transaction> reader = new FlatFileItemReader<>();

    Resource resource = new FileSystemResource("input/1-101-D-2017-212-volume-per-transaction.csv");

    try {
        resource.contentLength();
    } catch (IOException e) {
        e.printStackTrace();

    }

    reader.setResource(resource);
    reader.setRecordSeparatorPolicy(new BlankLineRecordSeparatorPolicy());

    DefaultLineMapper<Transaction> lineMapper = new DefaultLineMapper<>();
    reader.setLineMapper(lineMapper);
    reader.setStrict(false);
    reader.setLinesToSkip(NUMBER_OF_HEADER_LINES);

    DelimitedLineTokenizer tokenizer = new DelimitedLineTokenizer();
    reader.setSkippedLinesCallback(line -> tokenizer.setNames(line.split(",")));
    lineMapper.setLineTokenizer(tokenizer);

    lineMapper.setFieldSetMapper(new TransactionFieldSetMapper());
    reader.setLineMapper(lineMapper);

    return reader;

然后进入我的步骤,我有

        .faultTolerant()
        .retryLimit(3)
        .retry(FileNotFoundException.class)

谁能给我一些提示如何重试?

【问题讨论】:

标签: spring-batch


【解决方案1】:

希望它对你仍然有用,请参考这个例子,我放了一个使用 FlatFileItemReader 重试阅读器的例子: https://github.com/jeronimogalicia/batch-retry-flatfile-item-reader

基本上,您必须使用 @EnableRetry 注释您的应用程序类,并像这样注释您的阅读器:

@Bean
@StepScope
@Retryable(include = { ItemStreamException.class }, maxAttempts = 5)
ItemReader<Player> loadRecordsReader() throws Exception {

    String filePath = "src/main/resources/players.csv";
    System.out.println("Loading records from "  + filePath + " try " + counter);

    FlatFileItemReader<Player> itemReader = new FlatFileItemReader<>();
    itemReader.setResource(new FileSystemResource(filePath));
    itemReader.setLinesToSkip(1);
    //DelimitedLineTokenizer defaults to comma as its delimiter
    DefaultLineMapper<Player> lineMapper = new DefaultLineMapper<>();
    lineMapper.setLineTokenizer(new DelimitedLineTokenizer());
    lineMapper.setFieldSetMapper(new PlayerFieldSetMapper());
    itemReader.setLineMapper(lineMapper);
    itemReader.open(new ExecutionContext());
    return itemReader;
}

【讨论】:

    猜你喜欢
    • 2013-12-13
    • 2023-03-17
    • 1970-01-01
    • 2019-01-26
    • 2018-03-31
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 2020-02-10
    相关资源
    最近更新 更多