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

背景

    经常需要执行脚本调用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

posted @ 2015-10-21 17:12  飞起航  阅读(4483)  评论(0编辑  收藏  举报