文档章节

MongoDB的连接池和连接管理

今天来找bug
 今天来找bug
发布于 2016/07/13 16:37
字数 876
阅读 272
收藏 1
点赞 0
评论 0

在关系型数据库中,我们总是需要关闭使用的数据库连接,不然大量的创建连接会导致资源的浪费甚至于数据库宕机。这篇文章主要想解释一下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:

 

 

Java代码

 收藏代码

  1. <strong>public class MongoConnFactory {  
  2.   
  3.     private static MongoClient mongoClient = null;  
  4.   
  5.     @SuppressWarnings("deprecation")  
  6.     public static  DB getDB() throws UnknownHostException {  
  7.           
  8.          DB conn = null;  
  9.          if(mongoClient == null){  
  10.              intializeMongoClient();  
  11.                   
  12.         }  
  13.          String dbName = AppConfig.getValue(Const.MONGODB_DBNAME);  
  14.          String username = AppConfig.getValue(Const.MONGODB_USERNAME);  
  15.          String password = AppConfig.getValue(Const.MONGODB_PASSWORD);  
  16.          conn = mongoClient.getDB(dbName);  
  17.          conn.authenticate(username, password.toCharArray());  
  18.          return conn;  
  19.               
  20.           
  21.     }  
  22.   
  23.        private static void intializeMongoClient() throws UnknownHostException {  
  24.           
  25.            String host = AppConfig.getValue(Const.MONGODB_HOST);  
  26.            int port = AppConfig.getValueAsInteger(Const.MONGODB_PORT);  
  27.            mongoClient = new MongoClient( host , port );  
  28.           
  29.     }  
  30.   
  31.     public  static synchronized void closeConnection(){  
  32.           
  33.             if(mongoClient != null){  
  34.                   
  35.                 mongoClient.close();  
  36.                   
  37.             }  
  38.     }  
  39.           
  40.     }</strong>  

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

 

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

© 著作权归作者所有

共有 人打赏支持
今天来找bug
粉丝 8
博文 207
码字总数 36040
作品 0
深圳
程序员
spring-boot-starter-mongodb-pool

在日常工作中,我们通过Spring Data Mongodb来操作Mongodb数据库,在Spring Boot中只需要引入spring-boot-starter-data-mongodb即可。 很多时候我们往往需要操作多个数据库(微服务架构下一个...

尹吉欢 ⋅ 04/22 ⋅ 0

MongoDB 用户名密码登录

Mongodb enable authentication MongoDB 默认直接连接,无须身份验证,如果当前机器可以公网访问,且不注意Mongodb 端口(默认 27017)的开放状态,那么Mongodb就会产生安全风险,被利用此配...

kimoCHG ⋅ 2017/01/07 ⋅ 0

Docker MongoDB 部署

MongoDB 是一款较为常用的NOSQL 数据库,结合 Docker 使用,能实现轻松配置部署、迁移,本文以下为简要介绍如何在 Docker 中部署并使用 MongoDB。下文主要分为几个部分,内容如下: MongoDB ...

speculatecat ⋅ 04/06 ⋅ 0

Mongo DB 安装(window)

1.下载mongodb (mongodb-win32-x86_64-2008plus-ssl-3.4.4-signed)数据库到本地电脑之后,接下来开始安装,如下所示 2.安装好的mongodb ,如图所示 安装目录介绍 bin 目录是mongodb 的启动程...

IT达仁 ⋅ 05/02 ⋅ 0

Node后台|数据库的安装及使用(简版)

MAC 安装mongoDB 启动 mongoDB 判断mongoDB是否已经开启 关闭 mongoDB的服务 mongodb启动成功后会显示 然后我们去看看node如何连接mongodb node 连接mongoDB需要用到 mongoose 如果连接成功的...

贝一平 ⋅ 05/30 ⋅ 0

mongodb的命令行操作命令详解(增删改查、高级查询)

mongodb的命令行操作命令详解(增删改查、高级查询) 本文为上文的续篇,主要讲解mongodb在cmd的直接操作命令,我的mongodb是安装在d:mongodb下 1,mongodb启动服务 : 2,mongodb停止服务 : ...

xiaocao13140 ⋅ 06/04 ⋅ 0

如何在Ubuntu上开启MongoDB的IP Security

MongoDB3.6的默认配置会拒绝未授权的链接对公共网络的访问,从而保护数据收到外部威胁。MongoDB只会监听本地链接,除非添加规则允许监听其他地址。本教程会简明的展示如何允许外部IP地址连接...

linux-tao ⋅ 06/05 ⋅ 0

Centos7下安装mongodb

MongoDB由C++语言编写,是一个基于分布式文件存储的数据库,目的在于为web应用提供可扩展的高性能数据存储解决方案。它是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功...

goldfishe ⋅ 05/07 ⋅ 0

mongodb安裝及初相识(node,使用mongoose )

官网 https://www.mongodb.com/ 下载安装mongodb https://docs.mongodb.com/manual/tutorial/install-mongodb-on-windows/ 安装到最后一步时,将左下角的勾选去掉,那个勾选是安装图形化界面...

天上月丶 ⋅ 05/03 ⋅ 0

MongoDB在spring中xml传统配置

背景 旧项目中依然在使用springmvc的xml传统配置,最近需要使用MongoDB,需要在spring引入MongoDB的连接配置。 解决 配置mongodb数据库 配置mongodb数据工厂 配置mongodb的Template 配置mon...

亚林瓜子 ⋅ 06/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

android -------- 颜色的半透明效果配置

最近有朋友问我 Android 背景颜色的半透明效果配置,我网上看资料,总结了一下, 开发中也是常常遇到的,所以来写篇博客 常用的颜色值格式有: RGB ARGB RRGGBB AARRGGBB 这4种 透明度 透明度...

切切歆语 ⋅ 11分钟前 ⋅ 0

CentOS开机启动subversion

建立自启动脚本: vim /etc/init.d/subversion 输入如下内容: #!/bin/bash## subversion startup script for the server## chkconfig: 2345 90 10# description: start the subve......

随风而飘 ⋅ 14分钟前 ⋅ 0

Nginx + uwsgi @ubuntu

uwsgi 安装 sudo apt-get install python3-pip # 注意 ubuntu python3默认没有安装pippython3 -m pip install uwsgi 代码(test.py) def application(env, start_response): start_res......

袁祾 ⋅ 15分钟前 ⋅ 0

版本控制工具

CSV , SVN , GIT ,VSS

颖伙虫 ⋅ 18分钟前 ⋅ 0

【2018.06.19学习笔记】【linux高级知识 13.1-13.3】

13.1 设置更改root密码 13.2 连接mysql 13.3 mysql常用命令

lgsxp ⋅ 25分钟前 ⋅ 0

LVM

LVM: 硬盘划分分区成物理卷->物理卷组成卷组->卷组划分逻辑分区。 1.磁盘分区: fdisk /dev/sdb 划分几个主分区 输入t更改每个分区类型为8e(LVM) 使用partprobe生成分区的文件:如/dev/sd...

ZHENG-JY ⋅ 53分钟前 ⋅ 0

彻底删除Microsoft Office的方法

参照此链接彻底删除Office https://support.office.com/zh-cn/article/%e4%bb%8e-pc-%e5%8d%b8%e8%bd%bd-office-9dd49b83-264a-477a-8fcc-2fdf5dbf61d8?ui=zh-CN&rs=zh-CN&ad=CN......

Kampfer ⋅ 今天 ⋅ 0

大盘与个股之间关系

大盘走多:积极出手 顺势加码 大盘走空: 少量出手 退场观望 大盘做头:逆势减码 少量操作 大盘做底 : 小量建仓 小量试单

guozenhua ⋅ 今天 ⋅ 0

Day16 LVM(逻辑卷管理)与磁盘故障小案例

lvm详解 简述 LVM的产生是因为传统的分区一旦分区好后就无法在线扩充空间,也存在一些工具能实现在线扩充空间但是还是会面临数据损坏的风险;传统的分区当分区空间不足时,一般的解决办法是再...

杉下 ⋅ 今天 ⋅ 0

rsync实现多台linux服务器的文件同步

一、首先安装rsync,怎样安装都行,rpm,yum,还是你用源码安装都可以。因为我用的是阿里云的ESC,yum install rsync就ok了。 二、配置rsync服务 1.先建立个同步数据的帐号 123 groupadd r...

在下头真的很硬 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部