You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Batch:如何让AbstractPagingItemReader仅无结果时停止执行

解决方案

AbstractPagingItemReader默认的停止逻辑是当当前页返回的条目数小于页大小时,就判定没有更多数据,终止分页读取。要实现“仅当返回结果条数为0时才停止”的需求,你需要重写isExhausted()方法,修改停止判断条件。

具体代码修改如下:

public static final int ITEMS_BY_PAGE = 10;

// 初始化时设置页大小,避免每次doReadPage重复设置
public YourCustomReader() {
    setPageSize(ITEMS_BY_PAGE);
}

@Override
protected void doReadPage() {
    results = this.documentService.searchRecordsWithAwaitingDocument(getPage(), ITEMS_BY_PAGE);
}

@Override
protected void doJumpToPage(int itemIndex) {

}

// 重写isExhausted方法,仅当结果为空时才判定为无更多数据
@Override
protected boolean isExhausted() {
    return results.isEmpty();
}

说明

  • 默认的isExhausted()实现会判断results.size() < getPageSize(),只要当前页数据不足一页就停止;重写后改为只有结果集合为空时才返回true,触发停止逻辑。
  • 建议在构造方法中一次性设置pageSize,不需要在doReadPage()中重复调用setPageSize(),避免不必要的重复操作。

内容的提问来源于stack exchange,提问作者Tchiko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:50:45