MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Spring MongoItemReader non legge tutti i record in una singola esecuzione

Immagino che tu stia probabilmente aggiornando la raccolta da cui stai leggendo e stai anche aggiornando un campo utilizzato dalla query. Se è così, ho avuto lo stesso problema di recente.

MongoItemReader è un lettore di pagine. Quindi, ogni volta che lo scrittore aggiorna quei record, il lettore ha un pool più piccolo ma la pagina è ancora in aumento.

Quindi immagina di avere 20 elementi e di leggere 5 elementi alla volta:

1) Legge gli elementi 1-5 da un totale di 20.

2) Aggiorna gli articoli 1-5 e ora c'è un totale di 15 possibili articoli

3) Legge gli elementi 6-10 da un totale di 15.

4) Aggiorna gli elementi 6-10 e ora sono disponibili un totale di 10 elementi possibili.

5) Legge gli elementi 11-15 di 10 possibili elementi

6) Read restituisce null perché non viene restituito nulla per quella pagina.

Quindi ora ne hai elaborato solo la metà.

Ho seguito il tutorial qui sotto per creare un MongoDbCursorItemReader che ha risolto questo problema per me:https://blog.zenika.com/2012/05/23/spring-batch-and-mongodb-cursor-based-item-reader/