On the first page, the startAfterValues is not necessary, because the firstPageSql will be used. The "read.count" execution context value (persisted by the base class AbstractItemCountingItemStreamItemReader) should be sufficient for resuming where it left off.