`
zzc1684
  • 浏览: 1236534 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

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

阅读更多

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

分享到:
评论

相关推荐

    mongodb Java连接池

    mongodb Java连接池配置 用于避免Java连接mongodb数据库数过高引起的一系列问题

    Mongodb连接池for java

    标题“MongoDB连接池for Java”指的是在Java环境中,针对MongoDB数据库实现的连接池解决方案。这种解决方案通常基于特定的Java驱动程序,如MongoDB的Java驱动程序(com.mongodb.client.MongoClients),它提供了连接...

    java实现mongodb的数据库连接池

    总结起来,Java实现MongoDB的数据库连接池主要是通过配置连接池参数,并利用MongoDB的Java驱动库创建和管理连接。这不仅能优化数据库性能,还能提升应用程序的稳定性。同时,合理设置连接池参数,以及适当地管理和...

    java使用mogodb数据库连接池demo

    本示例是关于如何在Java应用中使用MongoDB数据库连接池,确保在高并发环境下数据库操作的稳定性和性能。我们将深入探讨连接池的概念、MongoDB的Java驱动程序以及如何实现安全验证。 首先,连接池是管理数据库连接的...

    java操作MongoDB数据库代码实例

    该rar包中包括MOngoDB数据库操作基本的增删改查,以及在CMD命令行中怎么配置MOngodb和增删改查,还有就是连接mongoDB的jar包和详细的操作文档,本来想上传NOde.js来着,可是只能上传60兆,只能放弃了,不过这些已经...

    Mongodb连接池JAVA

    MongoDB的连接池通过创建并维护一组数据库连接来实现。当应用需要一个连接时,可以从池中获取,使用完毕后归还,而不是每次操作都新建和关闭连接。这大大减少了建立和关闭连接的开销,提高了整体效率。 `...

    Mina+Mongodb+Mybatis+数据库连接池实例

    它结合了多种技术,包括Mina(一个用于构建高性能、高可用性的网络应用程序的Java框架)、MongoDB(一个流行的NoSQL数据库系统)、MyBatis(一个Java持久层框架)以及Proxool(一个数据库连接池实现)。这个实例主要...

    java连接mongodb.zip

    在实际应用中,你可能还需要考虑异常处理、连接池管理、事务支持、性能优化等方面。同时,为了提高代码的可读性和可维护性,可以使用Spring Data MongoDB这样的高级框架,它提供了更简洁的API和自动配置功能。 总之...

    MongoDB Java连接数据库.pdf

    在实际开发中,你可能还需要处理异常,使用连接池以提高性能,以及执行更复杂的查询和操作。MongoDB Java 驱动提供了丰富的 API,允许你灵活地操作文档、集合和数据库,从而充分利用 MongoDB 的功能。

    Java连接mongoDB需要的jar包

    在Java编程环境中,连接MongoDB数据库通常需要特定的驱动程序,这些驱动程序以JAR(Java Archive)文件的形式提供。MongoDB官方提供了Java驱动程序,使得开发者能够方便地在Java应用中集成MongoDB功能。本篇文章将...

    java 连接mongodb的操作

    在Java环境中,我们通常使用MongoDB的Java驱动程序来实现这种连接。本文将深入探讨如何使用Java API连接MongoDB,并执行基本的操作。 首先,确保已经在项目中引入了MongoDB的Java驱动程序。如果使用Maven,可以在`...

    Java JSP数据库连接大全

    Java JSP数据库连接大全是关于如何在Java Web应用程序中与各种数据库进行交互的全面指南。在JSP(Java Server Pages)开发中,数据库连接是必不可少的一部分,它允许开发者存储、检索和更新数据。本资源涵盖了7种...

    Spring Boot中使用MongoDB的连接池配置的方法

    在 Spring Boot 项目中,使用 MongoDB 作为数据库时,默认情况下并没有提供连接池配置的功能。这使得开发者需要自行重写 MongoDbFactory,以实现 MongoDB 客户端连接的参数配置扩展。在本文中,我们将介绍如何在 ...

    Springboot配置MongoDB连接池源代码

    Spring Boot默认集成了MongoDB Java驱动和Spring Data MongoDB,但并未直接提供连接池的配置。通常我们会使用如MongoDB Java驱动的`MongoClientSettings`来配置连接池,比如使用`...

    java 操作mongodb

    在 Java 开发环境中,可以通过 MongoDB 的 Java 驱动程序来实现对 MongoDB 数据库的操作。本文将详细介绍如何在 Java 中简单操作 MongoDB。 1. **Java 开发环境配置** - **系统**:Windows - **IDE**:Eclipse 或...

    JAVA操作MongoDB简单增删改查

    在实际项目中,你可能需要处理更复杂的查询和事务,以及错误处理和连接池管理等高级话题。学习更多关于MongoDB的官方文档和社区资源,如CSDN博客(http://blog.csdn.net/dream_broken/article/details/36014733),...

    java与不同数据库的连接

    1. Connection Pooling(连接池):在大型应用中,为了提高性能和效率,通常使用连接池来管理数据库连接。例如,C3P0、HikariCP、Apache DBCP等。 2. JPA(Java Persistence API)和Hibernate:JPA是Java EE提供的...

    MongoDBjava各版本驱动下载

    MongoDB Java驱动是Java开发者与MongoDB数据库交互的重要工具,它允许Java应用程序通过标准的Java API来执行查询、插入、更新和删除等操作。在Java中使用MongoDB,首先需要安装并配置对应的驱动版本,以确保与正在...

    mongodb java Driver

    MongoDB Java驱动程序是Java开发者用来与MongoDB数据库进行交互的一种关键工具。它提供了一组丰富的API,使得在Java应用程序中执行CRUD(创建、读取、更新、删除)操作变得简单而高效。MongoDB是一个分布式文档存储...

    mongoDB 操作 java源代码

    MongoDB 是一个流行的开源、分布式文档数据库,...通过阅读和学习这个源代码包,开发者不仅可以了解 MongoDB Java 驱动的内部实现,还能提升对 MongoDB 数据库操作的理解,从而编写出更高效、更稳定的 Java 应用程序。

Global site tag (gtag.js) - Google Analytics