在Java 中使用 MongoDB 时,创建一个连接,系统会分配一个连接池(可一理解成创建一个连接即创建了一个进程,一个进程里有多个线程而 MongoDB 应用的是里面的某个线程),在代码中,每查询一次数据库都创建了一个连接,导致浪费了许多可用的资源。
解决方法:创建一个工厂类统一创建连接
工厂类代码如下:
package com.cvicse.naba.storage.dao.impl.mongodb; import com.mongodb.DB; import com.mongodb.Mongo; import com.mongodb.MongoOptions; /** * 操作Mongodb的工厂类 * * @author Wendy * */ public class MongoDBFactory { private static Mongo mongo = null; private static boolean isAuth = false; /** * 构造函数,避免实例化 */ private MongoDBFactory() { } /** * @param dbName * @param userName * @param pwd * @param dbIp * @param dbPort * @return */ public static DB getDB(String dbName, String userName, String pwd, String dbIp, int dbPort) { if(mongo == null) { init(dbIp, dbPort); } //return mongo; DB db = mongo.getDB(dbName); if(!isAuth) { db.authenticate(userName, pwd.toCharArray()); isAuth = true; } return db; } /** * @param dbIp * @param dbPort */ private static void init(String dbIp, int dbPort) { try { mongo = new Mongo(dbIp, dbPort); MongoOptions opt = mongo.getMongoOptions(); opt.connectionsPerHost = 10; } catch(Exception e) { e.printStackTrace(); } } }