Mybatis的连接池

先总结一个原则:mytatis的连接池最大值poolMaximumActiveConnections尽量跟服务器的并发访问量持平以至于大于并发访问量。

原因:在org.apache.ibatis.datasource.pooled.PooledDataSource中,popConnection函数(获取连接)会锁住一个PoolState对象,pushConnection函数(把连接回收到池中,在关闭连接的时候,会调用PooledConnection的invoke函数<使用的代理模式,invoke是一个回调函数>,触发close函数时调用)也会锁住这个对象。

在popConnection的时候:

1.如果池中有idle的,返回之

2.如果没有,并且池中的active连接数小于配置的最大连接数,新建一个连接返回

3.如果没有idle并且连接数已经创建到最大,就不创建新连接。从acitve connection列表中返回一个最老的值state.activeConnections.get(0),看这个连接被取出的时间(check out时间,表示从连接开始使用到目前还未close)是不是超过poolMaximumCheckoutTime(配置项,默认是20秒),如果超过,使这个连接失效,并且使用这个连接返回做下一个操作

4.如果这个连接check out时间还未到poolMaximumCheckoutTime,调用state对象的wait函数:state.wait(poolTimeToWait);等待被唤醒(在连接close的时候会调用pushConnection函数,这里会调用state对象的notifyAll,唤醒之后重新进入循环取连接)

源代码比较长就不贴了,有兴趣的同学自己下下来看!

在并发数比连接池的数量大很多的情况下,会导致大量的排除竞争来同步state对象,开销比较大!会直接导致延时大大增加。

http://www.xuebuyuan.com/1676551.html

时间: 2024-10-26 08:55:52

Mybatis的连接池的相关文章

Mybatis 打开连接池和关闭连接池性能对比

1  创建数据库表 -- phpMyAdmin SQL Dump -- version 4.2.11 -- http://www.phpmyadmin.net -- -- Host: localhost -- Generation Time: 2016-08-02 18:13:50 -- 服务器版本: 5.6.21 -- PHP Version: 5.6.3 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET time_zone = "+0

mybatis+Druid连接池的问题

首先让我来描述问题 我有个系统是基于springmvc+mybatis+mysql+druid的,启动系统刚开始用没有问题,但是用着用着系统表象就是卡死 分析: 1:通过表象是不是有可能数据库锁表了,通过jvm的jstack -l pid(进程id) 如何得到进程id呢?--到jdk安装的bin目录执行 jps命令得到pid 打印出堆栈信息 此时没办法只能看druid的源码找到 此时要引起注意,看源码的时候一点要注意if条件的地方,此时我考虑是不是maxWait没有配置默认为0,此时我到自己的配

springboot-26-整合mybatis,druid连接池

sprinboot整合mybatis, 有2种方式, 第一种完全使用注解的方式, 还有一种就是使用xml文件的方式 项目使用gradle + idea, 数据源使用druid, 多使用groovy编写 环境配置 1, 依赖 dependencies { compile("org.springframework.boot:spring-boot-devtools") compile("org.springframework.boot:spring-boot-starter&qu

阶段3 1.Mybatis_07.Mybatis的连接池及事务_1 今日课程内容介绍

原文地址:https://www.cnblogs.com/wangjunwei/p/11317631.html

阶段3 1.Mybatis_07.Mybatis的连接池及事务_2 连接池介绍

原文地址:https://www.cnblogs.com/wangjunwei/p/11317664.html

《深入理解mybatis原理》 Mybatis数据源与连接池

对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池. 本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的.紧接着将分类介绍UNPOOLED.POOLED和JNDI类型的数据源组织:期间我们会重点讲解POOLED类型的数据源和其实现的连接池原理. 以下是本章的组织结构: 一.MyBatis数据源DataSource分类 二.数据源DataSour

独立出properties的mybatis连接池

1 jdbc.driver=com.mysql.jdbc.Driver 2 jdbc.url=jdbc:mysql://localhost:3306/java505?useSSL=true&characterEncoding=utf8&useSSL=true 3 jdbc.username=root 4 jdbc.password=root 1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!

《深入理解mybatis原理3》 Mybatis数据源与连接池

<深入理解mybatis原理> Mybatis数据源与连接池 对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池. 本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的.紧接着将分类介绍UNPOOLED.POOLED和JNDI类型的数据源组织:期间我们会重点讲解POOLED类型的数据源和其实现的连接池原理. 以下是本章的组织结构: 一.MyBa

mybatis深入理解(二)-----Mybatis数据源与连接池

对于ORM框架而言,数据源的组织是一个非常重要的一部分,这直接影响到框架的性能问题.本文将通过对MyBatis框架的数据源结构进行详尽的分析,并且深入解析MyBatis的连接池.本文首先会讲述MyBatis的数据源的分类,然后会介绍数据源是如何加载和使用的.紧接着将分类介绍UNPOOLED.POOLED和JNDI类型的数据源组织:期间我们会重点讲解POOLED类型的数据源和其实现的连接池原理. 一.MyBatis数据源DataSource分类 MyBatis数据源实现是在以下四个包中: MyBa