欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

解决com.mongodb.MongoException$CursorNotFound: cursor 0 not found on server

程序员文章站 2024-02-10 14:34:22
...

背景

    经常需要执行脚本调用Java程序读取mongodb中数据,本来是转为后台进程、偶尔看看日志的简单任务。今天发现程序抛出异常“com.mongodb.MongoException$CursorNotFound: cursor 0 not found on server”。一开始没在意,重新执行也可以继续跑,但是过一段时间又抛出同样错误,看来要战斗了。

分析

    在mogondb.org官网,我找到了同样的问题,这是一个2013年就发现并解决的问题,官方回应这一BUG,并且已经在版本(2.11.0 release)中解决了。异常原因是游标超时

      例外:或许在涉及oplog的操作中,还是会有问题,请参考:https://jira.mongodb.org/browse/JAVA-771

解决

  •  方案1:更新mongodb类库至2.11.0以上。

  •  方案2:如果我们不能更新mogondb的类库的话,也可以通过设置超时参数来解决,如下:

    cursor.addOption(com.mongodb.Bytes.QUERYOPTION_NOTIMEOUT);

参考

    cursor not found on server:https://jira.mongodb.org/browse/JAVA-907

    Repeated CursorNotFound exceptions on long-running process following oplog:https://jira.mongodb.org/browse/JAVA-771