Spring批量分页阅读器和异常处理
Posted
技术标签:
【中文标题】Spring批量分页阅读器和异常处理【英文标题】:Spring batch paginated reader and Exception handling 【发布时间】:2018-04-15 21:03:53 【问题描述】:我们创建了一个扩展 AbstractPaginatedDataItemReader
的自定义项目阅读器。 Spring-batch 允许管理哪些异常停止或不是作业(跳过的异常)。
在“经典”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
?
谢谢
【问题讨论】:
【参考方案1】:Spring Batch 阅读器最终是ItemReader
,无论它是分页阅读器还是非分页阅读器。这最终意味着它将把单个项目交给处理器,read()
方法合约才是最重要的。
分页阅读器只是对他们实际阅读项目的方式进行了优化,但与普通的非分页阅读器没有什么不同。
所以在我看来,您对doReadPage()
方法的关注似乎没有必要,重要的是read()
方法合同。
如果您遇到任何问题(从您的问题中不清楚),请告诉我。
【讨论】:
以上是关于Spring批量分页阅读器和异常处理的主要内容,如果未能解决你的问题,请参考以下文章
如何优雅地处理 Spring Security 中未由 ControllerAdvice 处理的异常?