Spring boot Spring批处理分页读取器和异常处理
我们创建了一个自定义项读取器,它扩展了Spring boot Spring批处理分页读取器和异常处理,spring-boot,exception-handling,pagination,spring-batch,Spring Boot,Exception Handling,Pagination,Spring Batch,我们创建了一个自定义项读取器,它扩展了AbstractPaginatedDaitaItemReader。Spring batch允许管理哪些异常停止或不停止作业(跳过的异常) 在“经典”spring批处理读取器中,doRead方法抛出任何异常。这意味着,如果在读取期间引发跳过的异常,则将跳过该项,作业将继续运行 但在分页读卡器中,用于检索下一个数据页的doPageRead方法不会引发任何异常: protected abstract Iterator<T> doPageRead();
AbstractPaginatedDaitaItemReader
。Spring batch允许管理哪些异常停止或不停止作业(跳过的异常)
在“经典”spring批处理读取器中,doRead
方法抛出任何异常。这意味着,如果在读取期间引发跳过的异常,则将跳过该项,作业将继续运行
但在分页读卡器中,用于检索下一个数据页的doPageRead
方法不会引发任何异常:
protected abstract Iterator<T> doPageRead();
由于doPageRead
方法没有声明任何抛出的异常,这意味着配置的跳过异常只能是RuntimeException
谢谢不管是分页阅读器还是非分页阅读器,Spring批处理阅读器最终都是一个ItemReader
。这最终意味着它将把单个项目移交给处理器,read()
方法契约才是最重要的
分页阅读器只是对它们实际读取项目的方式进行了优化,但与常规的非分页阅读器没有什么不同
因此,在我看来,您对doReadPage()
方法的关注似乎没有必要,重要的是read()
方法契约
如果你面临任何问题(你的问题还不清楚),一定要让我知道
protected T doRead() throws Exception {
synchronized (lock) {
if(results == null || !results.hasNext()) {
results = doPageRead();
page ++;
if(results == null || !results.hasNext()) {
return null;
}
}
if(results.hasNext()) {
return results.next();
}
else {
return null;
}
}
}