MongoDB Java 连接池的注意事项

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

1.Mongo对象

Mongo对象内部实现了一个连接池。Mongo对象是线程安全的,因此可以只创建一个,在多线程环境下安全使用。因此,我们可以用将Mongo变量作为一个Singleton类的成员变量,从而保证只创建一个连接池。Mongo.close方法将关闭当前所有活跃的连接。所以要在web工程被从Tomcat或者GlassFish容器中注销的时候确保调用close方法。

2.DB对象

DB对象可以通过Mongo.get方法获得,代表了和数据库的一个连接。默认情况下,当执行完数据库的查询或者更新操作后,连接将自动回到连接池中。不需要我们手动调用代码放回池中。至于如何实现,我猜测是update,query,save方法内部有finally块,那里面有还连接到池中的代码。


3.手动还连接入池

DB对象也允许在一个连接上执行多个操作,比如下面的代码:



DB db...;db.requestStart();code....db.requestDone();

requestStart 会让自动还连接入池失效,因此必须确保requestDone一定能够被调用。这里应该用finally块会更严密一些。

4.示例代码,下面的类实现了Lazy loading的Singleton模式,里面的成员变量Mongo mongo因此只会实例化一次。注意连接池大小和重连设置。

package com.freebird.helper;import com.mongodb.Mongo;import com.mongodb.MongoOptions;import com.mongodb.DB;/** * Describe class DBManager here. * example: * 初始化:DBManager.getInstance().init("74.208.78.5",27017,200); * 之后,每次通过下面的代码获取数据库对象 * DBManager.getInstance().getDB(); * Created: Sat Dec 17 10:45:24 2011 * * @author <a href="mailto:chenshu@chunshu">chenshu</a> * @version 1.0 */public class DBManager {    public static final String DB_NAME = "kaimei";        public static final String MESSAGE_COLLECTION = "email";    public static DBManager getInstance()return InnerHolder.INSTANCE;    }    /**     * Creates a new <code>DBManager</code> instance.     *     */    private DBManager() {     }    private static class InnerHolderstatic final DBManager INSTANCE = new DBManager();    }    public DB getDB()return mongo.getDB(DB_NAME);    }    private Mongo mongo;        public void init(final String ip, int port, int poolSize) throws java.net.UnknownHostException {        System.setProperty("MONGO.POOLSIZE", String.valueOf(poolSize));        if (mongo == null) {            mongo = new Mongo(ip, port);            MongoOptions options = mongo.getMongoOptions();            options.autoConnectRetry = true;            options.connectionsPerHost = poolSize;        }    }}


           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/fduffyyg/article/details/83542855