当前位置:网站首页 > 数据科学与大数据 > 正文

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



在我们平时开发中,使用数据库连接池时使用阿里的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/

到此这篇druid数据库连接池(druid数据库连接池原理)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • sundb数据库 达梦(达梦数据库blob)2025-08-02 20:09:10
  • 自动驾驶数据安全算法(自动驾驶 数据安全)2025-08-02 20:09:10
  • 小米手机数据迁移到苹果手机(小米手机数据迁移到苹果手机上)2025-08-02 20:09:10
  • 数据库端口号可以改吗(数据库的端口号在哪可以看到)2025-08-02 20:09:10
  • springboot数据源加密(springboot数据库配置加密)2025-08-02 20:09:10
  • spss23.0数据分析教程(spss24.0数据分析教程)2025-08-02 20:09:10
  • bs4解析网页(bs4数据解析)2025-08-02 20:09:10
  • oierdb数据库网址(oecd数据库)2025-08-02 20:09:10
  • faiss数据库可视化(数据库可视化是什么意思)2025-08-02 20:09:10
  • w25q128中文数据手册(w25q128中文数据手册免费下载)2025-08-02 20:09:10
  • 全屏图片