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
相关产品推荐
相关产品推荐

