【问题标题】:Spring batch paginated reader and Exception handlingSpring批量分页阅读器和异常处理
【发布时间】: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

谢谢

【问题讨论】:

    标签: spring-boot exception-handling pagination spring-batch


    【解决方案1】:

    Spring Batch 阅读器最终是ItemReader,无论它是分页阅读器还是非分页阅读器。这最终意味着它将把单个项目交给处理器,read() 方法合约才是最重要的。

    分页阅读器只是对他们实际阅读项目的方式进行了优化,但与普通的非分页阅读器没有什么不同。

    所以在我看来,您对doReadPage() 方法的关注似乎没有必要,重要的是read() 方法合同。

    如果您遇到任何问题(从您的问题中不清楚),请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-05
      • 1970-01-01
      • 1970-01-01
      • 2016-08-11
      • 2012-07-03
      相关资源
      最近更新 更多