breid MongoItemReader uit en zorg voor uw eigen implementatie voor de methode doPageRead(). Op deze manier heeft u volledige ondersteuning voor paginering en maakt het lezen van documenten deel uit van een stap.
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();
}
}
En andere getter en setters en andere methoden. Kijk maar eens naar de broncode voor MongoItemReader hier .Ik heb er ook Query-ondersteuning van verwijderd. Je kunt dat ook op dezelfde methode hebben, kopieer het gewoon vanuit MongoItemReader. Hetzelfde met Sorteren.
En in de klas waar je een reader hebt, zou je zoiets doen als:
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;
}