如何在超过@Retryable maxAttempts 后捕获Spring Batch 的ItemStreamException?
How to catch Spring Batch's ItemStreamException after @Retryable maxAttempts exceeded?
我有以下 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 次尝试后,如果 loadFile
不存在,将抛出 ItemStreamException。我怎样才能捕捉到这个异常?
我想通过向管理员发送电子邮件来处理此异常。我试过用 try catch 子句围绕 jobLauncher.run(job, jobParameters);
但它不起作用。
将重试拦截器配置为bean,并在interceptor
属性中指定;有一个 RetryInterceptorBuilder
可以帮助组装 bean。
你可以在重试次数耗尽后调用的拦截器中添加一个恢复器。
您可以为您的 reader 应用 skippable-exception-类 这样 Spring 批处理就不会失败。
如果发送电子邮件失败,我建议您使用 Job Listener 而不是 try/catch。
恩吉亚
我有以下 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 次尝试后,如果 loadFile
不存在,将抛出 ItemStreamException。我怎样才能捕捉到这个异常?
我想通过向管理员发送电子邮件来处理此异常。我试过用 try catch 子句围绕 jobLauncher.run(job, jobParameters);
但它不起作用。
将重试拦截器配置为bean,并在interceptor
属性中指定;有一个 RetryInterceptorBuilder
可以帮助组装 bean。
你可以在重试次数耗尽后调用的拦截器中添加一个恢复器。
您可以为您的 reader 应用 skippable-exception-类 这样 Spring 批处理就不会失败。
如果发送电子邮件失败,我建议您使用 Job Listener 而不是 try/catch。
恩吉亚