项目中需要用到mongodb,据介绍mongodb的连接采用连接池的思路,可以仅保持一个实例,
参考http://blog.csdn.net/sheismylife/article/details/7090526的代码完成自己的mongodb连接池控制类。
package cn.cnic.jingshao.mongodbapp.util;
import java.net.UnknownHostException;
import com.mongodb.DB;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.mongodb.MongoOptions;
public class MongoDBUtil {
//唯一的Mongo实例
private Mongo mongo;
//采用单例模式
private MongoDBUtil(){}
private static class InnerHolder{
static final MongoDBUtil INSTANCE = new MongoDBUtil();
}
public static MongoDBUtil getInstance(){
return InnerHolder.INSTANCE;
}
/**
* 初始化Mongodb连接
* @throws UnknownHostException
* @throws MongoException
*/
public void init() throws UnknownHostException, MongoException{
int poolSize = ConfigUtil.getInstance().getPoolSize(); //从配置文件中读取连接个数
if(poolSize == -1){
poolSize = 10000;
}
System.setProperty("MONGO.POOLSIZE", String.valueOf(poolSize));
if(this.mongo == null){
//System.out.println("1st init Mongo instance"); //mongo实例仅实例化一次
//从配置文件中读取服务器地址及端口号
String serverIp = ConfigUtil.getInstance().getServerIP();
int portNum = ConfigUtil.getInstance().getPortNum();
mongo = new Mongo(serverIp, portNum);
MongoOptions options = mongo.getMongoOptions();
options.autoConnectRetry = true;
options.connectionsPerHost = poolSize;
}
}
/**
* 获取DB实例
* @param dbName
* @return
*/
public DB getDB(String dbName){
if(dbName != null && !dbName.equals("")){
return this.mongo.getDB(dbName);
}else{
return null;
}
}
/**
* 关闭Mongodb
*/
public void close(){
if(this.mongo != null){
this.mongo.close();
this.mongo = null;
}
}
}