MyBatis数据库连接池

连接池就是存储连接的一个容器。容器是一个集合对象,该集合必须是线程安全的,不能两个线程拿到同一个连接。该集合必须实现队列的特性:先进先出。

MyBatis中连接池

  1. mybatis连接池提供了3种方式配置

  2. 配置的位置:主配置文件MapConfig.xml中datasource标签,type属性就是表示采用哪种连接池方式

  3. type属性的取值:PPOLED、UNPOOLED、JNDI

    (1)POOLED:采用传统的javax.sql.DataSource规范中的连接池。

    (2)UNPOOLED:采用传统的获取连接的方式,实现javax.sql.DataSource接口,但是没有使用池的思想

    (3)JNDI:采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到的 DataSource是不一样的。如果不是web或者maven的的war工程,是不能使用的,对于 tomcat服务器采用的是dbcp连接池。

  4. 数据源配置

    MyBatis 在初始化时,根据< dataSource>的 type 属性来创建相应类型的的数据源 DataSource,即:

    type=”POOLED”:MyBatis 会创建 PooledDataSource 实例

    type=”UNPOOLED” : MyBatis 会创建 UnpooledDataSource 实例

    type=”JNDI”:MyBatis 会从 JNDI 服务上查找 DataSource 实例,然后返回使用

1
2
3
4
5
6
<!-- 配置数据源(连接池)信息 --> 
<dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
  1. 获取连接的原理性过程

    mybatis使用的第三方连接池中设计了活动池和空闲池两个列表,加起来是连接池能用的最大连接数。

    对应PooledDataSource中文popConnection方法:

    • 当有新的连接请求时,若空闲池还有连接则直接取出来;

    • 如果空闲池没有连接,则查看活动池中的连接是否已经达到最大数量,没有超过最大数量时会创建一个新的连接,如果达到最大数量时,会将活动池中最先进来的连接进行返回。