在我的春季批处理应用程序中,我需要将数据从mongoDB迁移到postgreSQL。
我正在使用MongoItemReader读取数据。可以通过设置一些属性(例如查询,排序,字段等)来配置此阅读器。但是我不想从collection中读取所有数据,我只想读取其中的一部分,并通过“ skip”和“限制”游标属性。是否可以通过此类完成此操作,或者我应该使用其他mongo阅读器解决我的问题?

这是扩展MongoItemReader的阅读器类的代码。

public class MongoMigrateItemReader<T extends Migratable> extends MongoItemReader<T> implements ItemReader<T> {
    protected String collectionName;
    @Autowired
    MongoTemplate mongoTemplate;

    public MongoMigrateItemReader() {
    }

    @PostConstruct
    public void init() {
        Type type = ((ParameterizedType) this.getClass().getGenericSuperclass()).getActualTypeArguments()[0];
        Class<T> clazz = (Class<T>) type;
        this.setTemplate(mongoTemplate);
        this.setTargetType(clazz);
        this.setCollection(collectionName);
        this.setQuery("{}");
        HashMap<String, Sort.Direction> sort = new HashMap<>();
        sort.put("_id", Sort.Direction.ASC);
        this.setSort(sort);
    }


}

我想在init()方法中设置限制并跳过选项

最佳答案

MongoItemReader利用分页作为返回数据而不是游标的机制。由于没有完整数据集的游标,因此不能使用MongoDB的cursor#skipcursor#limit。要获得您想做的事,您必须实现自己的MongoItemReader。话虽如此,如果您觉得对他人有用,我们将不胜感激!

关于java - 限制和跳过MongoItemReader中的选项,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26627332/

10-10 17:58