java实现mongodb的数据库连接池

MongoDB是介于关系数据库和非关系数据库之间的一种产品,文件的存储格式为BSON(一种JSON的扩展),这里就主要介绍Java通过使用mongo-2.7.3.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
  * @Description: 获取表tableName的链接DBCollection
  */
 public DBCollection getDBCollection(String tableName) {
  return db.getCollection(tableName);
 } 

 /**
  * @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)方法即可。

以上就是本文的全部内容,希望本文所述对大家学习java程序设计有所帮助。

(0)

相关推荐

  • Java操作MongoDB模糊查询和分页查询

    本文实例为大家分享了Java操作MongoDB模糊查询和分页查询,供大家参考,具体内容如下 模糊查询条件: 1.完全匹配 Pattern pattern = Pattern.compile("^name$", Pattern.CASE_INSENSITIVE); 2.右匹配 Pattern pattern = Pattern.compile("^.*name$", Pattern.CASE_INSENSITIVE); 3.左匹配 Pattern pattern =

  • java查询mongodb中的objectid示例

    找了很久查询objectid的方法都是错的,用mongovue能查询出来,但就是用java不知道怎么查询 1.mongovue里的查询方式: 复制代码 代码如下: {"_id" : ObjectId("5326bfc0e6f780b21635248f")} 2.纯mongodb里的查询方式: 复制代码 代码如下: db.collect.find({ "_id" : ObjectId("5326bfc0e6f780b21635248f&q

  • Mongodb3.0.5 副本集搭建及spring和java连接副本集配置详细介绍

    Mongodb3.0.5 副本集搭建及spring和java连接副本集配置详细介绍 一.基本环境: mongdb3.0.5数据库 spring-data-MongoDB-1.7.2.jar mongo-Java-driver-3.0.2.jar Linux-redhat6.3 tomcat7 二.搭建mongodb副本集: 1.  分别在三台linux系统机上安装mongodb,(为避免和机器上原有的mongodb端口冲突,这里设为57017): 192.168.0.160 192.168.0.

  • Java连接MongoDB进行增删改查的操作

    Java连接MongoDB进行增删改查的操作 1.创建数据库的连接,进行增删改查 (分别为接口和实现类) package com.dao; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mo

  • java操作mongodb基础(查询 排序 输出list)

    复制代码 代码如下: package com.infomorrow.webroot; import java.util.List; import com.mongodb.BasicDBObject;import com.mongodb.DB;import com.mongodb.DBCollection;import com.mongodb.DBCursor;import com.mongodb.DBObject;import com.mongodb.MongoClient; public cl

  • MongoDB支持的java数据类型和测试例子

    mongodb的java数据类型有: Object Ids 自动IDRegular Expressions 正则表达式搜索记录Dates/Times 时间Database References 数据基础结构Binary Data 二进制流Timestamp Data 时间标记戳Code Data 代码数据Embedded Documents 嵌入式文档Arrays 数组类型 详细参考原来英文 http://docs.mongodb.org/ecosystem/drivers/java-types

  • Java操作Mongodb数据库实现数据的增删查改功能示例

    本文实例讲述了Java操作Mongodb数据库实现数据的增删查改功能.分享给大家供大家参考,具体如下: 首先,我们在windows下安装mongodb数据库,安装教程可查看前面一篇文章:http://www.jb51.net/article/85605.htm 代码如下: package io.mogo; import java.util.Map; import org.apache.commons.lang3.StringUtils; import com.mongodb.BasicDBObj

  • java操作mongodb时,对象bean和DBObject相互转换的方法(推荐)

    如下所示: package com.iqbon.spider.util; import java.lang.reflect.Field; import java.lang.reflect.InvocationTargetException; import java.util.Date; import org.apache.commons.beanutils.BeanUtils; import com.mongodb.BasicDBObject; import com.mongodb.DBObje

  • 简单学习Java+MongoDB

    MongoDB一些概念 下面以MongoDB和MySql的对比来说明 MySQL MongoDB database(数据库) db(数据库) table(表) collection(集合) row(行记录) document(文档) column(列) field(字段) primary key(指定主键) "_id" : ObjectId("******")  自动生成内置主键 Mysql的数据形式如下 同样的数据在MongoDB下类似于JSON键值对,叫BSON

  • Java操作MongoDB数据库示例分享

    MongoDB是一个文档型数据库,是NOSQL家族中最重要的成员之一,以下代码封装了MongoDB的基本操作. MongoDBConfig.java package com.posoftframework.mongodb; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.util.Enumeration; import java.util.HashMap; i

  • java操作mongodb实现CURD功能实例

    先下载相应的驱动:官网上下载:http://central.maven.org/maven2/org/mongodb/mongo-java-driver/本文使用mongo-2.10.1.jar版本: 下面有详细代码的,每个方法可以单独执行.其中为了方便运行,每个方法中都重新链接数据库,而没有再提出来,因为在此的目的是为了认识mongodb而已. 复制代码 代码如下: package com.mongo.dao;import com.mongodb.BasicDBObject;import co

随机推荐