加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

基于java实现mongodb的数据库连接池

发布时间:2020-12-14 23:51:13 所属栏目:Java 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 /** *@Description: mongo连接池配置文件 */ package cn.lulei.mongo.pool; public class MongoConfig {private static String userName;//用户名priv

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

 /**  
 *@Description:  mongo连接池配置文件
 */ 
package cn.lulei.mongo.pool;  
  
public class MongoConfig {
	
	private static String userName;//用户名
	private static String pwd;//密码
	private static String[] host;//主机地址
	private static int[] port;//端口地址
	private static String dbName;//数据库名
	private static int connectionsPerHost = 20;//每台主机最大连接数
	private static int threadsAllowedToBlockForConnectionMultiplier = 10;//线程队列数
	private static boolean authentication = false;//是否需要身份验证
	
	public static String getUserName() {
		return userName;
	}
	public static void setUserName(String userName) {
		MongoConfig.userName = userName;
	}
	public static String getPwd() {
		return pwd;
	}
	public static void setPwd(String pwd) {
		MongoConfig.pwd = pwd;
	}
	public static String[] getHost() {
		return host;
	}
	public static void setHost(String[] host) {
		MongoConfig.host = host;
	}
	public static int[] getPort() {
		return port;
	}
	public static void setPort(int[] port) {
		MongoConfig.port = port;
	}
	public static String getDbName() {
		return dbName;
	}
	public static void setDbName(String dbName) {
		MongoConfig.dbName = dbName;
	}
	public static int getConnectionsPerHost() {
		return connectionsPerHost;
	}
	public static void setConnectionsPerHost(int connectionsPerHost) {
		MongoConfig.connectionsPerHost = connectionsPerHost;
	}
	public static int getThreadsAllowedToBlockForConnectionMultiplier() {
		return threadsAllowedToBlockForConnectionMultiplier;
	}
	public static void setThreadsAllowedToBlockForConnectionMultiplier(
			int threadsAllowedToBlockForConnectionMultiplier) {
		MongoConfig.threadsAllowedToBlockForConnectionMultiplier = threadsAllowedToBlockForConnectionMultiplier;
	}
	public static boolean isAuthentication() {
		return authentication;
	}
	public static void setAuthentication(boolean authentication) {
		MongoConfig.authentication = authentication;
	}
}

 /**  
 *@Description: mongo数据库连接池管理类
 */ 
package cn.lulei.mongo.pool;  

import java.util.ArrayList;
import java.util.List;

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.Mongo;
import com.mongodb.MongoOptions;
import com.mongodb.ReadPreference;
import com.mongodb.ServerAddress;
  
public class MongoManager {
	
	private static Mongo mongo;
	private DB db;
	
	static{
		init();
	}
	
	/**
	* @param dbName
	* @param userName
	* @param pwd
	* 实例化dbName一个DB
	 */
	public MongoManager(String dbName,String userName,String pwd) {
		if (dbName == null || "".equals(dbName)) {
			throw new NumberFormatException("dbName is null");
		}
		db = mongo.getDB(dbName);
		if(MongoConfig.isAuthentication() && !db.isAuthenticated()){
			if (userName == null || "".equals(userName)) {
				throw new NumberFormatException("userName is null");
			}
			if (pwd == null || "".equals(pwd)) {
				throw new NumberFormatException("pwd is null");
			}
			db.authenticate(userName,pwd.toCharArray());
		}
	}
	
	/**
	 * 使用配置参数实例化
	 */
	public MongoManager() {
		this(MongoConfig.getDbName(),MongoConfig.getUserName(),MongoConfig.getPwd());
	}
	
	/**
	 * @param tableName
	 * @return
	 * @Date:2014-3-19  
	 * @Author:lulei  
	 * @Description: 获取表tableName的链接DBCollection
	 */
	public DBCollection getDBCollection(String tableName) {
		return db.getCollection(tableName);
	}
	
	/**
	 * @Date:2014-3-19  
	 * @Author:lulei  
	 * @Description: mongo连接池初始化
	 */
	private static void init() {
		if (MongoConfig.getHost() == null || MongoConfig.getHost().length == 0) {
			throw new NumberFormatException("host is null");
		}
		if (MongoConfig.getPort() == null || MongoConfig.getPort().length == 0) {
			throw new NumberFormatException("port is null");
		}
		if (MongoConfig.getHost().length != MongoConfig.getPort().length) {
			throw new NumberFormatException("host's length is not equals port's length");
		}
		try {
			//服务列表
			List<ServerAddress> replicaSetSeeds = new ArrayList<ServerAddress>();
			for (int i = 0; i < MongoConfig.getHost().length; i++) {
				replicaSetSeeds.add(new ServerAddress(MongoConfig.getHost()[i],MongoConfig.getPort()[i]));
			}
			//连接池参数设置
			MongoOptions options = new MongoOptions();
			options.connectionsPerHost = MongoConfig.getConnectionsPerHost();
			options.threadsAllowedToBlockForConnectionMultiplier = MongoConfig.getThreadsAllowedToBlockForConnectionMultiplier();
			mongo = new Mongo(replicaSetSeeds,options);
			//从服务器可读
			mongo.setReadPreference(ReadPreference.SECONDARY);
		} catch (Exception e){
			e.printStackTrace();
		}
	}
}

 /**  
 *@Description:   mongo测试
 */ 
package cn.lulei.mongo.test;  

import cn.lulei.mongo.pool.MongoConfig;
import cn.lulei.mongo.pool.MongoManager;
  
public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub 
		String[] host = {"127.0.0.1"};
		int[] port = {27001};
		MongoConfig.setHost(host);
		MongoConfig.setPort(port);
		MongoConfig.setDbName("novel");
		MongoManager mongoManager = new MongoManager();
		mongoManager.getDBCollection("chapter");
	}

}

在使用上述管理类时,只需要初始化MongoConfig类即可。对类 MongoManager的实例话,既可以使用MongoConfig的配置也可以自己通过参数来设置,每次获取DBCollection 时,只需要调用 getDBCollection(String tableName)方法即可

出处: http://blog.csdn.net/xiaojimanman/article/details/22652239

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读