memperluas MongoItemReader dan menyediakan implementasi Anda sendiri untuk metode doPageRead(). Dengan cara ini Anda akan memiliki dukungan pagination penuh dan pembacaan dokumen ini akan menjadi bagian dari sebuah langkah.
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();
}
}
Dan pengambil dan penyetel lainnya dan metode lainnya. Lihat saja kode sumber untuk MongoItemReader di sini .Saya juga menghapus dukungan Query darinya. Anda dapat memilikinya juga dengan metode yang sama, cukup salin tempel dari MongoItemReader. Sama dengan Sortir.
Dan di kelas di mana Anda memiliki pembaca, Anda akan melakukan sesuatu seperti:
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;
}