разширете MongoItemReader и осигурете своя собствена реализация за метода doPageRead(). По този начин ще имате пълна поддръжка за пагиниране и това четене на документи ще бъде част от стъпка.
public class CustomMongoItemReader<T, O> extends MongoItemReader<T> {
private MongoTemplate template;
private Class<? extends T> inputType;
private Class<O> outputType
private MatchOperation match;
private ProjectionOperation projection;
private String collection;
@Override
protected Iterator<T> doPageRead() {
Pageable page = PageRequest.of(page, pageSize) //page and page size are coming from the class that MongoItemReader extends
Aggregation agg = newAggregation(match, projection, skip(page.getPageNumber() * page.getPageSize()), limit(page.getPageSize()));
return (Iterator<T>) template.aggregate(agg, collection, outputType).iterator();
}
}
И други гетери и сетери и други методи. Просто погледнете изходния код за MongoItemReader тук .Премахнах и поддръжката на Query от него. Можете да го имате и в същия метод, просто го копирайте и поставете от MongoItemReader. Същото и със сортиране.
И в класа, където имате четец, бихте направили нещо като:
public MongoItemReader<T> reader() {
CustomMongoItemReader reader = new CustomMongoItemReader();
reader.setTemplate(mongoTemplate);
reader.setName("abc");
reader.setTargetType(input.class);
reader.setOutputType(output.class);
reader.setCollection(myMongoCollection);
reader.setMatch(Aggregation.match(new Criteria()....)));
reader.setProjection(Aggregation.project("..","..");
return reader;
}