Sha*_*ank 7 java mongodb spring-batch
需求发生了一些变化,我必须在 setQuery() 中使用聚合查询而不是基本查询。这可能吗?请建议我该怎么做?我的聚合查询已准备就绪,但不确定如何在 Spring Batch 中使用它
public ItemReader<ProfileCollection> searchMongoItemReader() throws Exception, UnexpectedInputException, ParseException, NonTransientResourceException {
MongoItemReader<MyCollection> mongoItemReader = new MongoItemReader<>();
mongoItemReader.setTemplate(myMongoTemplate);
mongoItemReader.setCollection(myMongoCollection);
mongoItemReader.setQuery(" Some Simple Query - Basic");
mongoItemReader.setTargetType(MyCollection.class);
Map<String, Sort.Direction> sort = new HashMap<>();
sort.put("field4", Sort.Direction.ASC);
mongoItemReader.setSort(sort);
return mongoItemReader;
}
Run Code Online (Sandbox Code Playgroud)
扩展 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();
}
}
Run Code Online (Sandbox Code Playgroud)
以及其他 getter 和 setter 等方法。只需在此处查看 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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5170 次 |
| 最近记录: |