我有以下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);
,但它不起作用。
答案 0 :(得分:1)
将重试拦截器配置为bean并在 class SomeClass : public QObject{
Q_OBJECT
public:
...
void someFunction(){
Parent* c = getChildObject(); //some call to get the Object of class Child
QObject::connect(c, &Parent::test,
this, &SomeClass::handle_test);
//QObject::connect: signal not found in Child
}
}
public slots:
void handle_test(){
//do something
}
}
属性中指定它;有一个interceptor
来帮助组装bean。
您可以将reoverer添加到拦截器中,该拦截器在重试耗尽后调用。
答案 1 :(得分:0)
您可以为您的读者应用可跳过的例外类,以便Spring Batch不会失败。
如果发送电子邮件失败,我会建议您使用Job Listener而不是try / catch。
Nghia酒店