package edu.fudan.eservice.common.utils;
import java.util.Arrays;
import java.util.Properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
/**
* 获取MongoDB的操作对象,MongoDB的Java Driver自带连接池,此单件对象用于返回操作用的MongoClient或者认证过的DB对象
* <pre>
* //获取MongoClient对象
* MongoClient client=MongoUtil.getInstance().getClient();
* //获取配置文件config.properties中默认的mongo.db并使用mongo.user/mongo.pwd认证
* DB db=MongoUtil.getInstance().getDB();
* @author wking
*
*/
public class MongoUtil {
private static MongoUtil mu=null;
private static Log log=LogFactory.getLog(MongoUtil.class);
private MongoClient client;
private Properties props;
protected MongoUtil() {
props=new Properties();
try {
props.load(this.getClass().getResourceAsStream("/dbconnect.properties"));
String user=props.getProperty("mongo.user");
if(!CommonUtil.isEmpty(user))
client=new MongoClient(new ServerAddress(props.getProperty("mongo.ip","localhost"),Integer.parseInt(props.getProperty("mongo.port","27017"))),
Arrays.asList(MongoCredential.createCredential(user, props.getProperty("mongo.db"), props.getProperty("mongo.pwd").toCharArray())));
else
client=new MongoClient(new ServerAddress(String.valueOf(props.get("mongo.ip")),Integer.parseInt(String.valueOf(props.get("mongo.port")))));
} catch (Exception e) {
log.error("MongoDB Connect Fail");
}
}
/**
* 单件模式获取MongoUtil实例
* @return
*/
public static synchronized MongoUtil getInstance()
{
if(mu==null)
{
mu=new MongoUtil();
}
return mu;
}
/**
* 获取MongoClient
* @return
*/
public MongoClient getClient()
{
return client;
}
/**
* 获取默认的DB对象并完成认证
* @return
*/
public DB getDB()
{
DB ret= client.getDB(String.valueOf(props.get("mongo.db")));
return ret;
}
/**
*
* @Title: getCollection
* @Description: 获取一个集合
* @param collectionName
* @return
*/
public DBCollection getCollection(String collectionName) {
return getDB().getCollection(collectionName);
}
}