我们创建了一个扩展AbstractPaginatedDataItemReader
的自定义项目阅读器。 Spring-batch允许管理哪个例外停止或不停止作业(跳过例外)。
在“经典”弹簧批量阅读器中,doRead
方法会抛出任何Exception
。这意味着,如果在读取过程中抛出了跳过的异常,则跳过该项并继续运行该作业。
但在分页读者中,用于检索下一个数据页的doPageRead
方法不会抛出任何异常:
protected abstract Iterator<T> doPageRead();
doPageRead
方法调用doRead
方法:
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;
}
}
}
由于doPageRead
方法没有声明任何抛出异常,这意味着配置的跳过异常只能是RuntimeException
?
由于
答案 0 :(得分:0)
Spring Batch阅读器最终是std::regex_search (str.cbegin(), str.cend(), match, rgx) )
~~ ~~
,无论它是寻呼阅读器还是非寻呼阅读器。这最终意味着它会将单个项目移交给处理器,而ItemReader
方法合同就是最重要的。
分页阅读器只是对他们实际阅读项目的方式进行了优化,但与常规的非分页阅读器没有区别。
所以在我看来,你注意read()
方法似乎是不必要的,重要的是doReadPage()
方法契约。
如果您遇到任何问题(并且您的问题不明确),请告诉我。