0

我有以下内容ItemReader

import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.item.ItemStreamException;
import org.springframework.batch.item.file.FlatFileItemReader;
import org.springframework.batch.item.file.LineMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.FileSystemResource;
import org.springframework.retry.annotation.Retryable;
import org.springframework.stereotype.Service;

@Service
public class MyReader extends FlatFileItemReader<Holding> {

    @Autowired
    public MyReader(LineMapper<Holding> lineMapper, File loadFile) {
        setResource(new FileSystemResource(loadFile));
        final int NUMBER_OF_HEADER_LINES = 1;
        setLinesToSkip(NUMBER_OF_HEADER_LINES);
        setLineMapper(lineMapper);
    }

    @Override
    @Retryable(value=ItemStreamException.class, maxAttempts=5,  backoff=@Backoff(delay=1800000))
    public void open(ExecutionContext executionContext) throws ItemStreamException {
                super.open(executionContext);
    }
}

第 5 次尝试后,如果 ItemStreamExceptionloadFile不存在,则会引发。我怎样才能捕捉到这个异常?

我想通过向管理员发送电子邮件来处理此异常。我尝试过jobLauncher.run(job, jobParameters);使用 try catch 子句,但它不起作用。

4

2 回答 2

1

将重试拦截器配置为bean并在interceptor属性中指定;有一个RetryInterceptorBuilder可以帮助组装 bean。

您可以向拦截器添加一个恢复器,该拦截器在重试用尽后调用。

于 2016-08-25T15:31:19.190 回答
0

您可以为您的阅读器应用可跳过的异常类,这样 Spring Batch 就不会失败。

为了在失败的情况下发送电子邮件,我建议您使用 Job Listener 而不是 try/catch。

于 2016-08-25T15:46:25.247 回答