2012-12-27 16 views
1

我有一個應用程序,當客戶端嘗試登錄時從Mongo DB中查找一個文檔。雖然這在大多數情況下都有效,但它有時會在「com.mongodb.MongoException $ Network:不能調用某些內容:」之後引發超時。請求似乎工作正常,但隨後一些其他調用隨機失敗,具有相同的例外。堆棧跟蹤的相關部分是當從Java驅動程序讀取Mongo Db的隨機超時 - 無法調用的東西

at com.mongodb.DBTCPConnector.innerCall(DBTCPConnector.java:295) 
at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:257) 
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:310) 
at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:295) 
at com.mongodb.DBCollection.findOne(DBCollection.java:727) 
at com.mongodb.DBCollection.findOne(DBCollection.java:669) 

我使用Spring的MongoTemplate得到一個集合,然後查詢它查找一個文件。我的代碼段會是這樣的,下面

BasicDBObject query = new BasicDBObject(); 
query.put("myIntParam", 283); 
DBCollection collection = mongoTemplate.getDb().getCollection(collectionName); 
DBObject foundDocument = collection.findOne(query); 

同蒙戈模板實例顯示在爲不同的收藏其他閱讀和寫作目的(我認爲應用習慣,建議只使用每個應用程序的單一實例)。

這個問題通常出現在我將應用程序閒置一段時間之後。我在Tomcat中使用JDK 1.7在Ubuntu 12.10服務器上運行(我的本地環境桌面版爲Ubuntu 12.10)。 Java驅動程序版本是2.10.1。提供以下配置選項

mongoOptions.connectTimeout=5000 
mongoOptions.socketTimeout=60000 
mongoOptions.socketKeepAlive=true 
mongoOptions.maxWaitTime=15000 
mongoOptions.autoConnectRetry=true 

任何意見或建議?

在此先感謝

回答

0

刪除mongoOptions.socketTimeout=60000項目,或趕上那麼超時異常由自己處理。

+0

刪除socketTimeout導致呼叫阻塞 - 如果我沒有弄錯,timeout的默認值是無限的,導致我的呼叫在此情況下永遠被阻塞。我懷疑我與服務器的連接正在以某種方式迷失方向(可能是連接問題) - 但有沒有辦法在撥打電話之前找出連接的健康狀況(理想情況下,我希望驅動程序在連接時自動重新連接陳舊) –

相關問題