Mybatis + Druid 数据库连接池的连接缓存原理

本文详细介绍了Mybatis与Druid数据库连接池的缓存原理,包括Mybatis默认连接池缓存、Druid连接池的初始化、连接获取及连接回收重用过程。在Druid中,数据库连接被维护在一个数组中,通过SqlSession的close方法,连接不会立即关闭,而是被回收到DruidDataSource中,以供后续使用,提高了效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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 =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值