2012-02-06 90 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对象意识到连接不再使用之前需要时间。