mở rộng MongoItemReader và cung cấp triển khai của riêng bạn cho phương thức doPageRead (). Bằng cách này, bạn sẽ có hỗ trợ phân trang đầy đủ và việc đọc tài liệu này sẽ là một phần của một bước.
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();
}
}
Và getter và setters khác và các phương pháp khác. Chỉ cần xem mã nguồn cho MongoItemReader tại đây . Tôi cũng đã xóa hỗ trợ Truy vấn khỏi nó. Bạn cũng có thể có điều đó trong cùng một phương pháp chỉ cần sao chép, dán nó từ MongoItemReader. Tương tự với Sắp xếp.
Và trong lớp học mà bạn có người đọc, bạn sẽ làm điều gì đó như:
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;
}