Mybatis + Druid 数据库连接池的连接缓存原理
Mybatis 默认数据库连接池缓存原理
Mybatis 默认数据库连接池缓存原理,和为什么要使用连接池, 网站上较多文章可以通过这个链接查看https://www.cnblogs.com/yougewe/articles/10061276.html
Mybatis+Druid 连接池原理
在Druid中定义了DruidDataSource
类来维护数据库连接池状态,定义了connections
数组来保存已经建立的数据库连接。
private volatile DruidConnectionHolder[] connections;
driud 将与数据库的物理连接(最原始的数据库
Connection
)保存在DruidConnectionHolder
中其中,DruidConnectionHolder
保存了数据库连接Connection
和连接监控信息。
Druid 连接池初始化和连接获取
Mybatis+Druid 数据库连接池一起使用时,首先是通过SqlSessionFactory.openSession获取一个SqlSession的实例,执行数据库操作时又通过SqlSession获取对应的Mapper,调用Mapper的方法,实际数据库连接Connection
的创建是在执行数据库操作的时候建立的。获取数据库连接的逻辑是在DruidDataSource中
public DruidPooledConnection getConnection(long maxWaitMillis) throws SQLException {
//按配置初始化数据库连接池
init();
if (filters.size() > 0) {
FilterChainImpl filterChain = new FilterChainImpl(this);
return filterChain.dataSource_connect(this, maxWaitMillis);
} else {
return getConnectionDirect(maxWaitMillis); //从数据库连接池中获取数据库连接
}
}
在调用DruidDataSource.geConnection
时首先会调用init方法,init方法按照mybatis的配置进行数据库连接池的初始化,初始化之后getConnectionDirect
再从连接池中返回数据库连接。
其中init方法中创建数据库连接池的部分逻辑如下:
//..校验配置信息合法性,通过配置信息创建加载驱动类
while (poolingCount < initialSize) {
try {
PhysicalConnectionInfo pyConnectInfo =