Mybatis连接池介绍与分类 Mybatis使用POOLED UNPOOLED配置连接池的原理分析
一、连接池
1.概念:其实就是一个容器(集合),存放数据库连接的容器。
当系统初始化好后,容器被创建,容器中会申请一些连接对象,当用户来访问数据库时,从容器中获取连接对象,用户访问完之后,会将连接对象归还给容器
容器其实就是一个集合对象,该集合必须是线程安全的,不能两个线程拿到统一连接
该集合还必须实现队列的特性:先进先出
2.好处:
1.节约资源
2.用户访问高效
3.实现:
1.标准接口:DataSource javax.sql包下的
1.方法:获取连接
获取连接:getConnection()
归还连接:Connection.close()如果连接对象Connection是从连接池中获得的,那么调用Connection.close()方法,则不会再关闭连接了。而是归还连接
2.一般我们不去实现它,有数据库厂商来实现
1.C3P0:数据库连接池技术
2.Druid:数据库连接池实现技术,由阿里巴巴提供的
二、Mybatis连接池
Mybatis 中也有连接池技术,但是它采用的是自己的连接池技术。
有三种方式的配置:
配置的位置:
在Mybatis的主配置文件SqlMapConfig.xml 配置文件中的dataSource标签,type属性就是表示采用何种连接池方式。
type属性的取值:POOLED 传统的javax.sql.DataSource规范中的连接池,mybatis中有针对规范的实现UNPOOLED 采用传统的获取连接的方式,虽然也实现了javax.sql.DataSource接口,但是并没有使用池的思想JNDI 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到的dataSource是不同的。注意:如果不是web或者maven的war工厂,是不能使用的。经常使用的tomcat服务器,采用连接池就是dbcp连接池
三、POOLED与UNPOOLED结果对比
POOLED
从池中取一个连接使用
UNPOOLED
每次都会创建一个新的连接
创建了用完就关闭 渣男
四、POOLED与UNPOOLED代码比较
MyBatis内部分别定义了实现了java.sql.DataSource接口的 UnpooledDataSource,PooledDataSource类来表示UNPOOLED、POOLED类型的数据源。
CTRL+N进行查找
两个都继承了DataSource
UNPOOLED配置连接池分析
找到getConnection
跟doGetConnection进去,发现在创建properties对象,传用户名密码
再跟进去,就发现了熟悉的DriverManager,我们先进入initializeDriver看
- initializeDriver负责组成驱动
- 创建连接
- 返回连接
这就是UNPOOLED,每次都会注册驱动,获取连接,返回连接
POOLED配置连接池分析
跟popConnection进去
代码解释
如果为null,同步代码块,这一点为了线程安全
idleConnection空闲的connection如果是控(取反——空闲的连接还有的话
这里可以看一下idleConnection发现就是一个集合对象,印证了前面说的定义
先去看空闲有没有,有就去一个出来remove0
活动的连接池数量小于设定的最大值就可以创建一个连接
目前的意思是有空闲的就给你拿一个空闲的,没有的话就看一下连接池有没有位置,给你创建一个新的
都不满足的话就只有拿一个最老的(最先进来的)把他返回获取。
pooled总的来说就是:
- 先去看空闲池有没有
- 再去看活动池是否到达最大数量,没达到就创建一个连接
- 活动池也满了就找活动池中最先进来的拿来设置和清理
(觉得有帮助的话点个赞嘻嘻)
Mybatis连接池介绍与分类 Mybatis使用POOLED UNPOOLED配置连接池的原理分析相关推荐
- jdbc连接mysql数据库驱动下载_Java Jdbc驱动下载配置连接mysql数据库方法代码
1.MySQL JDBC驱动下载 打开上面的下载地址,选择"Platform Independent",然后下载tar.gz或zip格式的都行,之后解压出来得到Jdbc驱动(mys ...
- python爬虫ip代理池_爬虫教程-Python3网络爬虫开发——IP代理池的维护
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 准备工作 要实现IP代理池我们首先需要成功安装好了 Redis 数据库并启动服务,另外还需要安装 Aiohttp.Requests.RedisPy.PyQ ...
- Mybatis中连接池介绍
连接池:我们在实际开发中都会使用连接池.以为它可以减少我们获取连接所消耗的时间mybatis中的连接池mybatis连接池提供了三种方式的配置,配置位置主配置文件SqlMapConfig.xml中的d ...
- mybatis数据库连接池介绍和源码剖析
mybatis数据库连接池分析介绍 一.数据库连接池 1.定义 数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个:释放空闲时间超过最大空闲时 ...
- ssm注解配置连接mysql_基于注解和配置类的SSM(Spring+SpringMVC+Mybatis)项目详细配置...
在上一篇文章中介绍了使用注解和xml配置文件对项目进行配置,在这篇文章中将xml配置文件中的配置信息都改成使用注解或者配置类的形式. 第一步.配置pom.xml 在一个ssm项目中,可能需要用到的依赖 ...
- Mybatis源码介绍
Mybatis源码体系介绍和配置文件解析源码剖析 Mybatis和传统JDBC的优势 Mybatis MyBatis是一个持久层的ORM框架,使用简单,学习成本较低.可以执行自己手写的 SQL语句,比 ...
- Mybatis框架详细介绍
一.Mybatis概述 1. 框架简介 目标 了解什么是框架 理解框架解决的问题 讲解 1.1 什么是框架 框架是整个或部分应用的可重用设计,是可定制化的应用骨架.它可以帮开发人员简化开发过程,提高开 ...
- spring中怎么访问MySQL过程_DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量...
DB数据源之SpringBoot+MyBatis踏坑过程(六)mysql中查看连接,配置连接数量 liuyuhang原创,未经允许禁止转载 系列目录连接 1.环境说明 mysql5.0以上版本. wi ...
- MyBatis超详细介绍——SQL语句构建器类
MyBatis超详细介绍--SQL语句构建器类 (本文作为学习笔记,了解更多请参考:MyBatis参考文档) MyBatis3提供了SQL类帮助构造SQL语句: private String sele ...
最新文章
- 【多标签文本分类】Initializing neural networks for hierarchical multi-label text classification
- NeurIPS 2019放榜:华人作者贡献42%,谷歌170篇屠榜;国内清华第一,腾讯领衔产业界...
- 【有上下界网络流】【ZOJ】2314 Reactor Cooling
- Android中的相对布局
- 交华为换机access配置_华为交换机VLAN内Proxy ARP配置示例
- 波纹扩散_C4D_动画amp;RS波纹扩散效果J_014
- 当你在浏览器输入一个网址,如http://www.taobao.com,按回车之后发生了什么?
- es6=unicode码详解
- SPIR-V 研究:编译器基本原理
- 《运营之光》-- 学习笔记(四)
- 基于MUI框架的使用HTML5+实现的二维码扫描功能
- 大数据挑战与NoSQL数据库技术pdf
- python read_csv dtype_Pandas read_csv low_memory和dtype选项
- 详解样条曲线(上)(包含贝塞尔曲线)
- c++ atuo_ptr 的实现原理
- Redis队列和专业MQ的对比和选型
- for循环实现质数python_少儿编程Python第4课-for循环语句(质数判断)
- 读书笔记-可靠性工程师前言
- ERROR 1010 (HY000): Error dropping database (can't rmdir './library', errno:
- 创建一个微信小程序——如何注册账号,安装微信开发者工具,创建一个小程序(详细步骤版)
热门文章
- java中static讲解
- selinux 简介
- 一篇看懂C#中的Task任务_初级篇
- 几种梯度下降方法对比(Batch gradient descent、Mini-batch gradient descent 和 stochastic gradient descent)
- android service单独进程,Android 通过Service单独进程模仿离线推送 Server Push
- Unix时间戳(Unix timestamp)及其他时间标准
- Postman使用各种格式的时间戳转换(UTC,Timestamp,UnixTimeStamp)
- 栈,实现递归的数据结构
- MLP Attention实现
- pre标签内容不自动换行解决方案