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 के लिए स्रोत कोड पर एक नज़र डालें यहां .मैंने इससे क्वेरी सपोर्ट भी हटा दिया। आप इसे उसी तरीके से प्राप्त कर सकते हैं, बस इसे 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;
}