`
BigCat2013
  • 浏览: 53270 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

MongoDB的连接池和连接管理

 
阅读更多

在关系型数据库中,我们总是需要关闭使用的数据库连接,不然大量的创建连接会导致资源的浪费甚至于数据库宕机。这篇文章主要想解释一下mongoDB的连接池以及连接管理机制,如果正对此有疑惑的朋友可以看一下。

通常我们习惯于new 一个connection并且通常在finally语句中调用connection的close()方法将其关闭。正巧,mongoDB中当我们new一个Mongo的时候,会发现它也有一个close()方法。所以会出现这样的情况:我们在需要DB操作的方法中new一个mongo实例,然后调用mongo.getDB()方法拿到对应的连接,操作完数据之后再调用mongo.close()方法来关闭连接。 看起来貌似是没有什么问题,但是如果你再研究一下mongo的API,你会发现这样耳朵操作就相当于园丁在浇花的时候去打了一桶水,然后舀了一勺水浇一朵花,然后他把一桶水全倒了回去,重新打一桶水,再舀了一勺水浇另外一朵花。。。

说到这里大家应该都已经明白了,其实当你new Mongo()的时候,就创建了一个连接池,getDB()只是从这个连接池中拿一个可用的连接。而连接池是不需要我们及时关闭的,我们可以在程序的生命周期中维护一个这样的单例,至于从连接池中拿出的连接,我们需要关闭吗?答案是NO。你会发现DB根本没有close()之类的方法。在mongoDB中,一个连接池会维持一定数目的连接,当你需要的时候调用getDB()去连接池中拿到连接,而mongo会在这个DB执行完数据操作时候自动收回连接到连接池中待用。所以在mongoDB中大家不必担心连接没有关闭的问题,在你需要在所有操作结束或者整个程序shutdown的时候调用mongo的close()方法即可。

以下的官网的一些解释:

public Class Mongo:

A database connection with internal connection pooling. For most applications, you should have one Mongo instance for the entire JVM.

public Class MongoClient:

A MongoDB client with internal connection pooling. For most applications, you should have one MongoClient instance for the entire JVM.

Note: This class supersedes the Mongo class. While it extends Mongo, it differs from it in that the default write concern is to wait for acknowledgment from the server of all write operations. In addition, its constructors accept instances of MongoClientOptions and MongoClientURI, which both also set the same default write concern.

In general, users of this class will pick up all of the default options specified in MongoClientOptions. In particular, note that the default value of the connectionsPerHost option has been increased to 100 from the old default value of 10 used by the superceded Mongo class.

 

Mongo 是一个过期的类,取而代之的是MongoClient, 值得一提的是MongoClient把connection的默认值从以前的10个变成了现在的100个,省去了自定义配置的繁琐,很贴心。

 

下面是我写的一个MongoConnectionFactory:

 

 

public class MongoConnFactory {

	private static MongoClient mongoClient = null;

	@SuppressWarnings("deprecation")
	public static  DB getDB() throws UnknownHostException {
		
		 DB conn = null;
		 if(mongoClient == null){
		     intializeMongoClient();
				
		}
		 String dbName = AppConfig.getValue(Const.MONGODB_DBNAME);
		 String username = AppConfig.getValue(Const.MONGODB_USERNAME);
		 String password = AppConfig.getValue(Const.MONGODB_PASSWORD);
		 conn = mongoClient.getDB(dbName);
		 conn.authenticate(username, password.toCharArray());
		 return conn;
			
		
	}

       private static void intializeMongoClient() throws UnknownHostException {
		
	       String host = AppConfig.getValue(Const.MONGODB_HOST);
		   int port = AppConfig.getValueAsInteger(Const.MONGODB_PORT);
		   mongoClient = new MongoClient( host , port );
		
	}

	public  static synchronized void closeConnection(){
		
    		if(mongoClient != null){
    			
    		    mongoClient.close();
    			
    		}
	}
		
	}

 原创文章,转载请注明出处:

 

http://bigcat2013.iteye.com/blog/2109633

 

谢谢!

 

0
0
分享到:
评论

相关推荐

    Mongodb连接池for java

    MongoDB连接池是解决数据库连接管理和复用的一种机制,旨在提高应用的并发能力,减少创建和销毁连接的开销,同时确保在高并发场景下的稳定性和响应速度。 标题“MongoDB连接池for Java”指的是在Java环境中,针对...

    C++ MongoDB 连接池代码实现

    该代码是C++ MongoDB的连接池代码实现。代码封装了一个连接池类对象,通过该对象提供的连接池来操作MongoDB,提升了性能,减少了数据库连接资源的开销。

    基于hyperf的mongodb连接池组件暂不支持协程

    总的来说,"基于hyperf的mongodb连接池组件暂不支持协程"这一问题提醒我们,在选择和使用技术栈时,要考虑其相互兼容性,尤其是在处理高并发和性能敏感的应用场景中。开发者需要时刻关注技术发展,适时调整和优化...

    Mongodb连接池JAVA

    总之,MongoDB连接池是Java应用中管理和优化数据库连接的关键组件。通过有效使用连接池,我们可以提高应用的响应速度,减少系统资源的消耗,从而提升整体性能。同时,合理的设计和测试也是确保连接池功能正常、高效...

    mongodb Java连接池

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

    Springboot配置MongoDB连接池源代码

    在本文中,我们将深入探讨如何在Spring Boot应用中配置MongoDB连接池,同时也会涉及到Spring Boot与MyBatis以及MySQL数据库的整合。Spring Boot以其简洁的配置和强大的自动化配置功能,已经成为Java开发者构建微服务...

    Mongodb连接池、增删改查实例套装

    "Mongodb连接池、增删改查实例套装"是针对初学者的教程资源,旨在帮助他们掌握MongoDB的基础操作和最佳实践。以下是这些实例中可能涉及的关键知识点: 1. **MongoDB连接池**: - **连接池概念**:连接池是管理...

    java使用mogodb数据库连接池demo

    在使用MongoDB连接池时,我们需要完成以下步骤: 1. 添加依赖:在你的`pom.xml`或`build.gradle`文件中引入MongoDB Java驱动和连接池库的依赖。例如,如果你选择HikariCP,那么对应的Maven依赖会是: ```xml ...

    java实现mongodb的数据库连接池

    MongoDB连接池的配置通常包括以下几个关键参数: 1. **userName** 和 **pwd**: 这两个属性用于设置访问MongoDB数据库的用户名和密码,如果数据库需要身份验证(authentication),则必须提供。 2. **host** 和 **...

    mongodb连接工具类

    在实际项目中,为了提高代码的健壮性和可测试性,还可以考虑加入错误处理、连接池管理、线程安全等设计。同时,虽然这个示例没有使用配置文件,但在生产环境中,通常会推荐使用配置文件来存储数据库连接信息,以增加...

    mongo设置连接池

    MongoDB连接池提供了多个关键参数来控制其行为,合理配置这些参数可以显著提高系统的性能和稳定性。以下是一些重要的参数: - **connectionsPerHost**: 每个主机的最大连接数。这是指与特定MongoDB服务器之间的连接...

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

    "Spring Boot中使用MongoDB的连接池配置的方法" 在 Spring Boot 项目中,使用 MongoDB 作为数据库时,默认...在 Spring Boot 中,我们可以使用上述方法来实现 MongoDB 的连接池配置,以提高应用程序的性能和可扩展性。

    mongoDB连接需要的jar包,支持jdk1.6

    在本场景中,我们讨论的是一个针对JDK 1.6的MongoDB连接所需的jar包集合。 首先,`mongo-java-driver`是官方提供的Java驱动程序,版本为3.2.2。这个驱动程序允许Java应用程序直接与MongoDB服务器通信,执行CRUD...

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

    "Mina+Mongodb+Mybatis+数据库连接池实例" 这个标题表明,我们将讨论一个具体的项目实例,它结合了多种技术,包括Mina(一个用于构建高性能、高可用性的网络应用程序的Java框架)、MongoDB(一个流行的NoSQL数据库...

    python实现连接mongodb并执行相关操作

    python实现连接mongodb并执行相关操作,添加数据,并查询数据

    mongodb的c++连接接口

    7. **性能优化**:C++ 驱动允许进行一些性能优化,比如批量操作、连接池管理、异步操作等,这有助于提高应用程序的整体性能。 8. **安全注意事项**:在实际应用中,确保正确处理用户输入,防止 SQL 注入攻击,并且...

    koa-mongo, 用于koa的MongoDB中间件,支持连接池.zip

    koa-mongo, 用于koa的MongoDB中间件,支持连接池 koa-mongokoa是一个用于koa@2的mongodb中间件,支持连接池。NB: 如果使用了,则使用 koa-mongo@0.安装npm i koa-mongo --save用法app.use

    java 连接mongodb的操作

    在实际项目中,你可能需要处理更复杂的情况,如错误处理、连接池管理、使用GridFS存储大文件等。不过,了解这些基础操作后,你可以轻松地扩展到更高级的功能。在开发过程中,记得查阅MongoDB Java驱动的官方文档,它...

    Java连接mongoDB需要的jar包

    3. **mongodb-driver-core-3.9.1.jar**:这是驱动程序的核心库,包含了与MongoDB服务器进行网络通信的基本设施,如连接池、心跳检测、SSL支持等。它是mongodb-driver.jar的基础,提供了异步和同步两种执行模型,使得...

    连接池原来这么简单

    6. **高级功能支持**: 如负载均衡、故障转移和服务自动扩容等功能可以在连接池层面实现。 综上所述,连接池是一种重要的技术手段,能够显著提高系统的并发处理能力和性能表现。通过合理的设计和实现,可以解决许多...

Global site tag (gtag.js) - Google Analytics