2012-06-06 37 views
1

我有下面的代碼Mongo Java在無效主機/端口上連接,它真的連接嗎?

public class MongoService { 

    private final Mongo mongo; 
    private static final Logger LOGGER = LoggerFactory.getLogger(MongoService.class); 

    public MongoService() throws UnknownHostException { 
     mongo = new Mongo("localhot", 2707); 
     DB db = mongo.getDB("contract"); 
     LOGGER.info(db.getCollection("Test").getName()); 
    } 

    public Mongo getMongoInstance() { 
     return mongo; 
    } 

    public void insert() { 
     LOGGER.info("will run mongo insert now"); 
    } 

    public void query() { 
     LOGGER.info("will run query now"); 
    } 

    public static void main(String args[]) throws UnknownHostException { 
     MongoService mongoService = new MongoService(); 
     mongoService.insert(); 
     mongoService.query(); 

    } 
} 

輸出

15:26:07.509 [main] INFO c.s.s.business.persist.MongoService - Test 
15:26:07.514 [main] INFO c.s.s.business.persist.MongoService - will run mongo insert now 
15:26:07.514 [main] INFO c.s.s.business.persist.MongoService - will run query now 
  • 主機(應該是本地主機)和端口(應爲27017),顯然是錯誤的,但是當我運行這個程序,它運行並沒有給出任何例外

  • 它真的連接?我肯定不會,那麼如何處理這種情況呢?

+0

你有合適的日誌記錄級別的蒙戈駕駛員設定? – ltfishie

+0

我該怎麼做? – daydreamer

+0

在你的log4j配置中,你可以添加類似於。如果您在那裏沒有收到錯誤消息,我會很驚訝。 – ltfishie

回答

1

mongo.getDB(「contract」)只是創建一個DB Object並將其放入mongo-java-driver內部緩存中。

AFAIK,只有在向數據庫發送請求(即查找,插入,...等操作)時才從池中獲取連接。

嘗試執行findOne操作和一個IOException應該發生:

java.io.IOException: couldn't connect to [/127.0.0.1:2017] bc:java.net.ConnectException: Connection refused 
    at com.mongodb.DBPort._open(DBPort.java:228) 
    at com.mongodb.DBPort.go(DBPort.java:112) 
    at com.mongodb.DBPort.go(DBPort.java:93) 
    at com.mongodb.DBPort.findOne(DBPort.java:146) 
    at com.mongodb.DBPort.runCommand(DBPort.java:157) 
    at com.mongodb.DBTCPConnector.fetchMaxBsonObjectSize(DBTCPConnector.java:457) 
    at com.mongodb.DBTCPConnector.checkMaster(DBTCPConnector.java:444) 
    at com.mongodb.DBTCPConnector.call(DBTCPConnector.java:209) 
    at com.mongodb.DBApiLayer$MyCollection.__find(DBApiLayer.java:305) 
    at com.mongodb.DBCollection.findOne(DBCollection.java:647) 
    at com.mongodb.DBCollection.findOne(DBCollection.java:626) 
    at com.mongodb.DBCollection.findOne(DBCollection.java:615) 
+0

這是我的理解是,但只是想確保我想到正確!,謝謝@Benoit回答 – daydreamer

+0

有沒有其他方式來找到失敗/無效的連接? –

+0

這裏是另一個答案在SO:http://stackoverflow.com/questions/6832517/how-to-check-from-a-driver-if-mongodb-server-is-running –

相關問題