2012-02-06 98 views
0

我沒有任何數據庫的經驗,但我必須將它用於我正在構建的應用程序,並選擇MongoDB。MongoDB對象實例

現在一切正常,但我每次需要向數據庫發出請求時都會創建一個新的Mongo對象,而且我明白這是錯誤的。

所以我想問問,瞭解什麼是做這種正確的方法,我有這樣的一個名爲MongoDbConnnection類下面的一些代碼:

public class MongoDbConnection { 
    private static Mongo _mongo; 
     public static Mongo getMongo() 
     { 
      if (_mongo == null) { 
      try { 
        _mongo = new Mongo(); 
       } catch (UnknownHostException e) { 
        _mongo = null; 
        e.printStackTrace(); 
       } catch (MongoException e) { 
        _mongo = null; 
        e.printStackTrace(); 
       } 
      } 
     return _mongo; 
    } 
} 

所以,每次我需要做一個查詢,我做Mongo m = MongoDbConnnection.getMongo();並繼續前進。

這是正確的嗎?

我也混淆了什麼時候關閉連接,因爲我有另一個類延伸HttpServlet,並會響應GET,每次有人請求url時,我將不得不查詢數據庫並返回信息。如果我在回覆一個請求後立即關閉,那麼其他人在此之後再次請求它會怎麼樣。那麼我必須再次創建一個新的Mongo對象?

換句話說,我知道Mongo實例維護一個連接輪詢,所以當我調用m.close()時,我只是替換了我使用的連接,還是將對象m設置爲null?

回答

0

是的,你大多正從連接的保持你連接池的:

Mongo m = new Mongo(); 
DB db = m.getDB("mydb"); 

你只需要一個蒙戈對象,它是線程安全的。

我還沒有研究在細節執行,但你必須調用

db.close() from your code. 

這將直接返回到連接池,而不是將其關閉。 如果你忘了這麼做,我猜想在Mongo對象意識到連接不再使用之前需要時間。