MyBatis使用连接池

本文介绍了数据库连接池的概念,强调了其在提高效率方面的作用。MyBatis提供了三种连接池配置,包括PooledDataSource、UnpooledDataSource和JNDI。重点解析了PooledDataSource的工作流程,它包含空闲池和活动池,确保线程安全并优化连接获取。在获取连接时,首先从空闲池获取,若无则新建或回收活动池中最旧的连接。实际开发中,连接池的使用是必不可少的。
摘要由CSDN通过智能技术生成

MyBatis使用连接池

什么是连接池?

通俗来讲,连接池就是用于存储连接的容器
容器其实就是一个集合对象,该集合必须是线程安全的,不能两个线程拿到同一个连接;该集合还必须实现队列的特性-先进先出.
我们在实际的开发中都会使用连接池,因为他可以减少我们获取连接所消耗的时间.

MyBatis中的连接池

MyBatis中的连接池提供了三种方式的配置
配置的位置 :

  • 主配置文件sqlMapConfig.xml中的DataSource标签,type属性就是表示采用何种连接方式

type属性的取值 :

  1. POOLED : 采用传统的javax.sql.DataSource规范中的连接池,MyBatis中有针对规范的实现;对应的实现类是PooledDataSource
  2. UNPOOLED : 采用传统的获取连接的方式,虽然也实现了javax.sql.DataSource接口,但是没有采用池的思想,也就没有上面说到的容器的概念,而是一种需要就申请的情况;对应的实现类是UnpooledDataSource
  3. JNDI : 采用服务器提供的JNDI技术实现,来获取DataSource对象,不同的服务器所能拿到的DataSource是不一样的,如果不是web或者maven的war工程是不能使用的;Tomcat采用的是dbcp连接池.

PooledDataSource获取连接过程分析

PooledDataSource是采用连接池的方式,如前面所说.连接池是一个线程安全的容器,不过在这个类中存在两个池对象,分别为空闲池和活动池.
空闲池中存放的是还没有被使用的连接对象;活动池存放的是正在使用的对象,他们都是ArrayList类型的(实际上是一个队列).
在使用PooledDataSource获取连接的过程会进行如下操作.

  1. 线程获取连接,会先检查空闲池是否还有可用连接对象,如果有,直接来拿用即可,如果没有,跳到步骤2
  2. 查看活动池是否已满,如果未满,new一个新的连接对象,加入池中(入队),并且返回,如果已满,进入步骤3
  3. 选择最老的连接对象(下标为0的那个),清理这个对象的信息,完毕后将它返回

需要注意的是,上面的操作必须保证线程安全,所以将上面的操作放在同步代码块中(synchronized修饰)
实际开发中我们也是使用连接池的方式.

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值