MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Spring MongoItemReader não lendo todos os registros em uma única execução


Suponho que você provavelmente esteja atualizando a coleção de sua leitura e também atualizando um campo que a consulta está usando. Se sim, tive o mesmo problema recentemente.

O MongoItemReader é um leitor paginado. Assim, cada vez que o escritor atualiza esses registros, o leitor tem um conjunto menor, mas a página ainda está aumentando.

Então imagine que temos 20 itens e lemos 5 itens por vez:

1) Lê os itens 1-5 de um total de 20.

2) Atualiza os itens 1-5 e agora há um total de 15 itens possíveis

3) Lê os itens 6-10 de um total de 15.

4) Atualiza os itens 6-10 e agora há um total de 10 itens possíveis.

5) Lê os itens 11-15 de 10 itens possíveis

6) Read retorna null porque não há nada retornado para essa página.

Então agora você só processou metade.

Eu segui o tutorial abaixo para criar um MongoDbCursorItemReader que resolveu esse problema para mim:https://blog.zenika.com/2012/05/23/spring-batch-and-mongodb-cursor-based-item-reader/