Seu erro está ocorrendo porque você está processando o fluxo muito lentamente, portanto, o cursor está expirando antes de você chegar ao próximo lote.
O tamanho do lote pode ser definido em Objeto Spring Data Query , ou em um Repositório usando o @Meta anotação. Por exemplo:
Query query = query(where("firstname").is("luke"))
.batchSize(100);
Ou ao usar repositórios:
@Meta(batchSize = 100)
List<Person> findByFirstname(String firstname);
Consulte Documentação do Spring Data MongoDB para mais detalhes.
O tempo limite do cursor também pode ser desabilitado por consulta usando a mesma configuração. por exemplo.
@Meta(flags = {CursorOption.NO_TIMEOUT})
. O tempo limite do cursor não pode ser alterado por consulta. Essa é uma configuração de servidor. Você precisa usar o cursorTimeoutMillis parâmetro do servidor para alterar esse parâmetro em todo o servidor.