druid数据库连接池(druid数据库连接池原理)

druid数据库连接池(druid数据库连接池原理)在我们平时开发中 使用数据库连接池时使用阿里的 Druid 连接池已经比较常见了 但是我们在集成到 Springboot 时似乎非常简单 只需要简单的配置即可使用 那么 Druid 是怎么加载的呢 本文就从源码层面进行揭秘 首先简单的介绍下如何使用 1 pom xml 加载 jar 包 直接使用集成 springboot 的 jar 2 application properties 进行配置

大家好,我是讯享网,很高兴认识大家。



在我们平时开发中,使用数据库连接池时使用阿里的Druid连接池已经比较常见了,但是我们在集成到Springboot时似乎非常简单,只需要简单的配置即可使用,那么Druid是怎么加载的呢,本文就从源码层面进行揭秘

首先简单的介绍下如何使用

1、pom.xml加载jar包,直接使用集成springboot的jar

2、application.properties进行配置

主要配置参数就是初始化连接数和最大连接数,最大连接数一般不需要配置的太大,一般8核cpu使用8个线程就可以了,原因是8核cpu同时可以处理的线程数只有8,设置的太大反而会造成CPU时间片的频繁切换

初始化了一个DataSource,实现类是DruidDataSourceWrapper,这个DataSource就是我们jdk提供jdbc操作的一个很重要的接口

到这里DataSource已经初始化完成了

我们开始从使用的地方入手,我的项目是基于Mybatis查询数据库的,这里从Mybatis查询开始入手

我们都知道Mybatis查询最终必定会从mybatis的Executor的query开始执行

所以我们在BaseExecutor的query方法打上断点,果然进来了,然后我们继续看

我们只看核心代码,进入queryFromDatabase

继续跟

这里我们看到获取了一个Statement ,这个Statement 是我们java原生操作数据库的一个很重要的类,这个Statement 应该是需要从一个数据库连接(Connection)上获取的,这里就很重要了,所以我们就需要看在里面是怎么获取Connection的就可以了

继续

核心代码,获取Connection,进入了SpringManagedTransaction的getConnection方法

继续

核心代码处,这个this.dataSource就是我们一开始通过自动装配初始化的。

DataSourceUtils这个类是spring提供的,也就是最终数据源的策略是通过spring提供的扩展机制,实现不同的dataSource来实现不同功能的

继续

继续

这里的核心代码1也很重要的,这里我们后续再看

继续看dataSource_connect

继续,进入了StatFilter的dataSource_getConnection

继续,然后又回到了FilterChainImpl的dataSource_connect

这个时候走了下面这个方法

核心代码1处获取了一个DruidConnectionHolder,DruidConnectionHolder里面有个关键的成员变量,就是我们的连接Connection

这里的decrementPoolingCount就是把一个int的变量poolingCount-1,然后在connections数组里面取某一个Connection

这里就已经看到核心代码了,connections就是我们的线程池了,是一个数组类型,里面存放了我们需要的连接,依靠一个指针poolingCount来控制当前应该可以取哪一个下标的Connection

接下来再看下之前没看的init

核心代码1,初始化了一个最大连接数的数组

核心代码2,初始化初始连接数数量的线程池连接

到这里,核心代码就全部看完了,本文是从Mybatis查询开始看代码的,实际上核心代码可以直接从DataSource的getConnection方法开始看

Druid连接池的核心功能主要就是注册一个DataSource的bean,连接池、获取连接等都依赖于DataSource的实现类DruidDataSourceWrapper,连接池功能主要是维护了一个数组,在项目启动时提前创建了一些数据库连接放到了里面复用

 

参考:https://blog.csdn.net/_/article/details/

小讯
上一篇 2025-06-15 11:09
下一篇 2025-05-02 08:18

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/203400.html