MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Spring MongoItemReader ne lit pas tous les enregistrements en une seule exécution

Je suppose que vous mettez probablement à jour la collection à partir de laquelle vous lisez et que vous mettez également à jour un champ utilisé par la requête. Si c'est le cas, j'ai eu le même problème récemment.

Le MongoItemReader est un lecteur paginé. Ainsi, chaque fois que l'auteur met à jour ces enregistrements, le lecteur dispose d'un pool plus petit, mais la page continue d'augmenter.

Alors imaginez que nous avons 20 éléments et lisons 5 éléments à la fois :

1) Lit les éléments 1 à 5 sur un total de 20.

2) Met à jour les éléments 1 à 5 et il y a maintenant un total de 15 éléments possibles

3) Lit les éléments 6 à 10 sur un total de 15.

4) Met à jour les éléments 6 à 10 et il y a maintenant un total de 10 éléments possibles.

5) Lit les éléments 11 à 15 sur 10 éléments possibles

6) Read renvoie null car rien n'est renvoyé pour cette page.

Alors maintenant, vous n'en avez traité que la moitié.

J'ai suivi le tutoriel ci-dessous pour créer un MongoDbCursorItemReader qui a résolu ce problème pour moi :https://blog.zenika.com/2012/05/23/spring-batch-and-mongodb-cursor-based-item-reader/