java实现mongodb的数据库连接池

 更新时间:2015年12月30日 11:44:47   作者:xiaojimanman  
这篇文章主要介绍了基于java实现mongodb的数据库连接池,Java通过使用mongo-2.7.3.jar包实现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程序设计有所帮助。

相关文章

  • 使用Logback日志保存到相对路径的操作

    使用Logback日志保存到相对路径的操作

    这篇文章主要介绍了使用Logback日志保存到相对路径的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • 详解maven安装教程以及解决安装不成功的解决办法

    详解maven安装教程以及解决安装不成功的解决办法

    这篇文章主要介绍了详解maven安装教程以及解决安装不成功的解决办法,详细的介绍了几种解决方法,非常具有实用价值,需要的朋友可以参考下
    2018-12-12
  • Java编程代码性能优化

    Java编程代码性能优化

    本文介绍了 Java 代码优化的过程,总结了优化 Java 程序的一些最佳实践,分析了进行优化的方法,并解释了性能提升的原因,需要的朋友可以参考下
    2015-11-11
  • 基于Mybatis Plus实现多表分页查询的示例代码

    基于Mybatis Plus实现多表分页查询的示例代码

    这篇文章主要介绍了基于Mybatis Plus实现多表分页查询的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 浅谈SSH框架中spring的原理

    浅谈SSH框架中spring的原理

    下面小编就为大家带来一篇浅谈SSH框架中spring的原理。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • Maven中两个命令clean 和 install的使用

    Maven中两个命令clean 和 install的使用

    Maven是一个项目管理和自动构建工具,clean命令用于删除项目中由先前构建生成的target目录,install命令用于将打包好的jar包安装到本地仓库中,供其他项目依赖使用,下面就来详细的介绍一下这两个命令
    2024-09-09
  • spring boot 全局异常处理方法汇总

    spring boot 全局异常处理方法汇总

    这篇文章主要介绍了spring boot 全局异常处理方法汇总,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • Ubuntu安装jdk8常用方法流程解析

    Ubuntu安装jdk8常用方法流程解析

    这篇文章主要介绍了Ubuntu安装jdk8常用方法流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-11-11
  • Spring中@Conditional注解的详细讲解及示例

    Spring中@Conditional注解的详细讲解及示例

    这篇文章主要介绍了Spring中@Conditional注解的详细讲解及示例,@Conditional是Spring4新提供的注解,它的作用是按照一定的条件进行判断,满足条件给容器注册bean,需要的朋友可以参考下
    2023-11-11
  • 在spring boot3中使用native image的最新方法

    在spring boot3中使用native image的最新方法

    这篇文章主要介绍了在spring boot3中使用native image ,今天我们用具体的例子来给大家演示一下如何正确的将spring boot3的应用编译成为native image,需要的朋友可以参考下
    2023-01-01

最新评论