使用Spring Data MongoDB进行多线程Java进程的CursorNotFound

时间:2014-07-24 09:21:04

标签: java multithreading spring mongodb spring-data-mongodb

我有一个多线程java进程的问题,在我的主要部分我启动一个分页查询并将结果放在线程中,执行select,updates和很多疯狂的东西。

用于执行查询的方法是Query.skip(int skip)Query.limit(int limit),其限制值为10.000。

当分页超过800.000个元素时,该进程会抛出以下异常:

Exception:org.springframework.dao.DataAccessResourceFailureException: Cursor XXXXXXXX not found on server XXXXXXXX:XXXXX; nested exception is com.mongodb.MongoException$CursorNotFound: Cursor XXXXXXXX not found on server XXXXXXXX:XXXXX
    at org.springframework.data.mongodb.core.MongoExceptionTranslator.translateExceptionIfPossible(MongoExceptionTranslator.java:60)
    at org.springframework.data.mongodb.core.MongoTemplate.potentiallyConvertRuntimeException(MongoTemplate.java:1918)
    at org.springframework.data.mongodb.core.MongoTemplate.executeFindMultiInternal(MongoTemplate.java:1801)
    at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1612)
    at org.springframework.data.mongodb.core.MongoTemplate.doFind(MongoTemplate.java:1596)
    at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:535)
    at org.springframework.data.mongodb.core.MongoTemplate.find(MongoTemplate.java:526)

问题出在哪里?

我的mongo选项:

<mongo:options auto-connect-retry="true"
            connections-per-host="30"
            socket-keep-alive="true" max-auto-connect-retry-time="15000"
            max-wait-time="60000" socket-timeout="0" />

版本:

Spring : 3.2.9.RELEASE
Spring Data Mongdb: 1.5.1.RELEASE
Mongo Java Driver: 2.12.2

也许有些照片会有所帮助:

Monitoring MonitoringLongTime

为什么这个过程如此之大?这是答案StatelessKnowledgeSession Focus Agenda

感谢!!!

0 个答案:

没有答案