连接池就是存储连接的一个容器。容器是一个集合对象,该集合必须是线程安全的,不能两个线程拿到同一个连接。该集合必须实现队列的特性:先进先出。
MyBatis中连接池
mybatis连接池提供了3种方式配置
配置的位置:主配置文件MapConfig.xml中datasource标签,type属性就是表示采用哪种连接池方式
type属性的取值:PPOLED、UNPOOLED、JNDI
(1)POOLED:采用传统的javax.sql.DataSource规范中的连接池。
(2)UNPOOLED:采用传统的获取连接的方式,实现javax.sql.DataSource接口,但是没有使用池的思想
(3)JNDI:采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到的 DataSource是不一样的。如果不是web或者maven的的war工程,是不能使用的,对于 tomcat服务器采用的是dbcp连接池。
数据源配置
MyBatis 在初始化时,根据< dataSource>的 type 属性来创建相应类型的的数据源 DataSource,即:
type=”POOLED”:MyBatis 会创建 PooledDataSource 实例
type=”UNPOOLED” : MyBatis 会创建 UnpooledDataSource 实例
type=”JNDI”:MyBatis 会从 JNDI 服务上查找 DataSource 实例,然后返回使用
1 | <!-- 配置数据源(连接池)信息 --> |
获取连接的原理性过程
mybatis使用的第三方连接池中设计了活动池和空闲池两个列表,加起来是连接池能用的最大连接数。
对应PooledDataSource中文popConnection方法:
当有新的连接请求时,若空闲池还有连接则直接取出来;
如果空闲池没有连接,则查看活动池中的连接是否已经达到最大数量,没有超过最大数量时会创建一个新的连接,如果达到最大数量时,会将活动池中最先进来的连接进行返回。