項目中需要用到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;
}
}
}