Mybatis数据源原理浅析
2021-11-25 13:03:51 1 举报
Mybatis数据源原理的流程分析
作者其他创作
大纲/内容
判断本次获取连接中坏连接数次数是否大于最大空闲连接数+3
PooledDataSource关闭连接流程:
UnpooledDataSourceFactory
同步锁PoolState对象:state
PooledDataSource
创建PooledConnection对象(使用UnpooledDataSource获取连接作为参数)
否
判断如果该超时连接没有自动提交
DataSource
判断连接是否已自动提交
Wrapper
坏连接数+1
代理类
创建新的PooledConnection对象,并加入到空闲列表
是
判断连接是否不为空
Mybatis数据源整体关系:
管理连接池的状态
UnpooledDataSource
返回连接
当前连接设置为无效
判断连接是否有效
结束
真实连接关闭,连接置为无效
DataSourceFactory
开始
判断state的空闲连接列表是否为空
判断连接是否为null
事务回滚
PooledConnection
同步锁PoolState对象:state(对象锁)
判断空闲列表数量是否小于最大空闲连接数&&是预期的数据连接类型编号(url+用户名+密码:哈希值)
阻塞等待
从存活连接列表中获取最先创建的连接
判断当前连接是否有效
判断最早创建连接的超时时间是否大于最大超时时间
获取1个空闲连接
获取连接每次都重新创建
判断连接是否自动提交
setProperties()方法为UnpooledDataSource对象属性进行配置
判断存活连接列表的大小是否超过最大存活连接数
PooledDataSourceFactory
唤醒阻塞等待的线程(state.notifyAll())
PoolState
则自动回滚
PooledDataSource获取连接流程:
将连接放到存活连接列表中
创建PooledConnection对象
抛出无法获取连接异常
CommonDataSource
设置超时连接为无效
统计超时数据,并从存活连接列表中移除该连接
判处异常
从存活列表中移除当前连接
0 条评论
下一页