
Druid
文章平均质量分 78
Druid数据库连接池
宋小生的博客
《中间件源码》 示例先行,深入浅出的源码解析分享
展开
-
[Druid-1.2.11源码系列]-9-Druid销毁线程
在前面的博文中我们介绍了创建Druid连接的线程的逻辑《6-DruidDataSource物理连接创建线程createAndStartCreatorThread》 ,这里来看下销毁连接的逻辑。这个代码调用逻辑是来源于前面说的DruidDataSource的连接对象获取时的初始化方法init调用代码如下:9.2 创建销毁线程的具体逻辑直接来看DruidDataSource类型的createAndStartDestroyThread代码如下所示:9.3 销毁线程代码这里直接来看代码了9.4 销毁任原创 2022-06-29 22:48:35 · 647 阅读 · 0 评论 -
[Druid-1.2.11源码系列]-8-数据库连接的首次验证validateConnection方法
在DruidAbstractDataSource物理连接创建的方法createPhysicalConnection的时候说到了使用驱动包来创建连接Connection对象,当对象创建完毕之后会调用validateConnection方法来进行连接信息的验证,调用代码如下所示:在前面我们的Demo中我们为DruidDataSource设置了这样一个属性如下所示:上面这个属性将会用到验证连接的地方。接下来我们来看下DruidAbstractDataSource的validateConnection方法:..原创 2022-06-28 22:48:39 · 823 阅读 · 0 评论 -
[Druid-1.2.11源码系列]-7-mysql-connector-java驱动包内部的创建数据库连接对象的过程
上一个博客介绍了FilterChainImpl类型获取驱动器创建连接的方法如下代码所示:这个driver驱动是在DruidDataSource初始化init方法执行的时候通过调用方法 resolveDriver();根据url自动创建的驱动类型这个驱动类型为:com.mysql.cj.jdbc.Driver接下来我们会详细看这个com.mysql.cj.jdbc.Driver中的连接方法。在详细介绍连接方法我们先简单看一下它的继承关系如下图所示:为什么要介绍com.mysql.cj.jdbc.Dr原创 2022-06-27 22:53:35 · 619 阅读 · 1 评论 -
[Druid-1.2.11源码系列]-6-DruidDataSource物理连接创建线程createAndStartCreatorThread
前面我们介绍了如何打印连接监控信息的到日志中的线程信息,这里继续代码执行过程中触发的创建连接的线程类型,根据前面的代码来看是通过这样一个方法调用来触发的:对于了解过JDBC连接的同学应该都知道创建一个连接java.sql.Connection类型对象并不麻烦,先初始化驱动然后通过Driver驱动类型的工具类调用getConnection方法即可,但是如果想要将这些连接信息管理起来并不是太方便,接下来就让我们看下Druid连接池是如何做的吧,DruidDataSource的createAndStartCre原创 2022-06-20 22:54:43 · 649 阅读 · 0 评论 -
[Druid-1.2.11源码系列]-5-DruidDataSource监控信息定期打印日志线程LogStatsThread
前面我们说了初始化《3-Connection连接数据库之前的初始化操作》初始化线程池时候初始化了一个打印线程信息的线程 LogStatsThread对象logStatsThread创建,调用代码如下所示:DruidDataSource类型的init方法中调用创建和打印监控信息到日志的线程具体逻辑如下:DruidDataSource类型的createAndLogThread方法5.2 线程类5.2.1 线程类LogStatsThread监控打印到日志的类型LogStatsThread可以看到上原创 2022-06-16 22:30:56 · 1161 阅读 · 0 评论 -
[Druid-1.2.11源码系列]-4-DruidDataSource初始化时的神操作之自动解析DbType与驱动类
前面那个博客《3-Connection连接数据库之前的初始化操作》我们简单介绍了连接时候的初始化操作,其中有两个地方调用了JdbcUtils 来通过配置的jdbc url来自动解析数据库类型和驱动的代码,这里将会简单介绍下,方便我们了解Druid支持的数据库操作,如果在开发工作中有手动配置数据源和数据库类型的地方可以参考这两个方法实现,也可以直接把代码拷贝过去:JdbcUtils中自动解析的代码并不是特别复杂的逻辑,这里介绍一下主要方便我们了解下Druid支持的底层数据库类型,以MySQL这个Demo为例原创 2022-06-15 22:25:05 · 1246 阅读 · 0 评论 -
[Druid-1.2.11源码系列]-3-Connection连接数据库之前的初始化操作
前面创建Druid数据源,并且为其设置了基本的参数,接下来我们就来拿着这些带有参数的数据源对象来创建与数据库的连接,如下所示:关于Connection连接对象,我们来看下官方对他的解释:与特定数据库的连接(会话)。在连接上下文中执行SQL语句并返回结果。连接对象的数据库能够提供描述其表、支持的SQL语法、存储过程、此连接的功能等的信息。此信息是通过getMetaData方法获得的。注意:配置连接时,JDBC应用程序应使用适当的连接方法,如setAutoCommit或setTransactionIsola原创 2022-06-09 23:53:26 · 727 阅读 · 0 评论 -
[Druid-1.2.11源码系列]-2-DruidDataSource数据源简介
前面我们的示例代码创建了数据源对象并为它设置了基本参数这里可以看回顾一下:关于DruidDataSource这个类型在官方文档与源码中都未找到任何的注释,那我们暂时就称它为Druid数据源吧,数据源封装了需要连接的数据库的基本信息,我们先来看下它的类型继承关系,然后再看它的属性:在详细说明DruidDataSource类型之前我们先来看相关类型有什么作用,不论是继承还是实现的关系最终DruidDataSource都会具备父类的一些特征与行为,那就来看下相关父类型的作用:DruidDataSourceDr原创 2022-06-08 22:37:06 · 955 阅读 · 0 评论 -
[Druid-1.2.11源码系列]-1-从一个Demo出发
这里主要是通过一个数据库连接池的例子来看下优秀的数据库连接池Druid的实现原理:如果是想要了解如何使用可以查阅下官方的wiki即可,这里主要是对源码执行的过程和相关设计原理的分析,方便在使用本数据库连接池时遇到问题可以及时诊断与优化。克隆代码:切换分支:获取到的代码如下图:1.2.8的tag最后版本被改为了1.2.9_preview_01 ,这个代码管理稍微不规范了些,不过不影响我们分析为了方便测试我们创建一个druid数据库来进行测试1.3.2 引入依赖新建maven项目,引入依赖然后导入原创 2022-06-07 23:26:32 · 470 阅读 · 0 评论