当前位置:首页 > 开发 > 数据库 > 正文

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

发表于: 2015-07-05   作者:zzc1684   来源:转载   浏览:
摘要: MongoDB是介于关系数据库和非关系数据库之间的一种产品,文件的存储格式为BSON(一种JSON的扩展) 这里就主要介绍一样在Java中通过使用mongo-2.7.3.jar这个jar包实现mongodb连接池的实现,具体的java代码实现如下: 数据库连接池配置参数: /** *@Description: mongo连接池配置文件 */ package cn.lulei.m

MongoDB是介于关系数据库和非关系数据库之间的一种产品,文件的存储格式为BSON(一种JSON的扩展)

这里就主要介绍一样在Java中通过使用mongo-2.7.3.jar这个jar包实现mongodb连接池的实现,具体的java代码实现如下:

数据库连接池配置参数:

/** 
 *@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

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
clearpool的maven项目托管在https://github.com/xionghuiCoder/clearpool,同时也可以在http://www.
今天下午花了三个小时的时间研究了一下基于Tomcat5.0的Oracle10g的数据库连接池,本来以为很简单,
c++ 实现数据库连接池 自己尝试用c++ 新标准实现了数据库连接池,代码简化了很多。 思路: 将数据库
目前常用的主流Java数据库连接池有:Druid,Proxool,c3p0,DBCP等,他们都是开源项目且使用率极高
Druid是阿里巴巴的一个开源项目,据该网站称:Druid首先是一个数据库连接池。Druid是目前最好的数据
目前常用的主流Java数据库连接池有:Druid,Proxool,c3p0,DBCP等,他们都是开源项目且使用率极高
Druid是阿里巴巴的一个开源项目,据该网站称:Druid首先是一个数据库连接池。Druid是目前最好的数据
网上偶然发现的一段代码,备受好评,做了一次尝试,果然经典 package myDB; import java.io.*; impo
Java数据库连接池(一) 几个概念 JDBC:Java Data Base Connectivity,java数据库连接,提供使用 Ja
Java数据库连接池(二) 连接池需要解决的问题 连接池在Java应用中扮演着重要的角色,J2EE已经将连
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号