java如何在spring批处理中使用MongoItemReader的聚合查询
在setQuery()中,我必须使用聚合查询而不是基本查询。这可能吗? 请建议我怎么做?我的聚合查询已准备就绪,但不确定如何在spring批处理中使用它
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;
}
# 1 楼答案
扩展MongoItemReader,并为doPageRead()方法提供自己的实现。通过这种方式,您将获得完整的分页支持,阅读文档将是一个步骤的一部分
以及其他的获取者和设置者以及其他方法。请看一下MongoItemReader here的源代码。 我还从中删除了查询支持。你也可以用同样的方法从MongoItemReader复制粘贴它。Sort也一样
在有读者的课堂上,你会做一些类似的事情:
# 2 楼答案
为了能够在作业中使用聚合,利用spring batch的所有功能,您必须创建一个自定义ItemReader。 扩展AbstractPaginatedDateItemReader,我们可以使用可分页操作中的所有元素。 下面是该自定义类的一个简单示例:
如果你仔细观察,你会发现它是使用Spring框架中的MongoItemReader创建的,你可以在org上看到这个类。springframework。一批项目数据MongoItemReader,有一种方法可以创建一个扩展AbstractPaginatedDaitaItemReader的全新类,如果你看一看“doPageRead”方法,你应该能够看到它只使用MongoTemplate的find操作,因此不可能在其中使用聚合操作
以下是我们的CustomReader如何使用它:
正如您可能注意到的,您还需要一个MongoTemplate实例,下面是它的工作原理:
其中,MongoDbFactory是spring framework的一个自动连接对象
希望这足以帮助你