Druid-类图-属性表
本篇为「工具人」文章,建议直接用「ctrl+f」进行查找属性、方法、类名,快速了解其含义和所属类。
主要流程里主要涉及到的类名称、类属性、类方法如下图(淡黄色表示属性,淡蓝色表示方法):
类图
DruidAbstractDataSource抽象类
这个类是druid连接池基础类,定义了一些连接池该有的基本属性,以及生成驱动连接对象的方法。
属性表:
username | 用户名 |
password | 密码 |
jdbcUrl | 驱动连接 |
driverClass | 驱动class,可以不用配置 |
initialSize | 初始化连接池(主流程2)时需要预先生成的连接对象个数 |
maxActive | 池内最大连接数,也就是说生成连接的线程在当前池内连接数超过这个指标后就不再工作了,参考主流程3 |
minIdle | 池内最小闲置连接数,参考流程4.1 |
maxWait | 在业务线程拿不到可用连接而发生排队时,等待获取到可用连接对象的最大等待时间,参考主流程1和流程1.2 |
notFullTimeoutRetryCount | 获取不到连接时,会尝试重试,这里表示最大重试次数,参考主流程1 |
testOnBorrow | 在取出链接时,是否进行连接可用性测试,默认不开启,参考主流程1 |
testOnReturn | 在回收连接时,是否进行连接可用性测试,默认不开启,参考主流程5 |
testWhileIdle | 在闲置时间超出指定时间(timeBetweenEvictionRunsMillis)后进行连接可用性测试 |
timeBetweenEvictionRunsMillis | 默认60s,一个连接闲置时间超出该值,且设置了testWhileIdle为true时,进行连接可用性测试 |
inited | 是否已被初始化过,参考主流程2 |
filters(集合) | 触发责任链执行时需要执行的所有filter |
maxWaitThreadCount | 默认不开启(-1),表示取不到连接发生等待时阻塞的最大业务线程数,参考流程1.2 |
removeAbandoned | 是否主动回收一些被拿出去使用长久没有归还的连接,默认不开启,参考流程4.2 |
removeAbandonedTimeoutMillis | 表示在removeAbandoned开启的情况下,触发主动归还的时间间隔。 |
dbType | 标记该连接池对象是属于什么数据库类型(根据驱动协议头推算出来) |
validConnectionChecker | druid有多个验证长连接可用性的checker对象,该属性最终会根据数据库类型适配合适的checker对象,参考流程1.3里的init-checker |
lock | 控制连接池线程安全的全局重入锁(参考全部流程里出现的lock) |
notEmpty | 由lock创建的Condition,用于连接不够用时阻塞业务线程,同时唤起主流程3的守护线程追加连接,解释参考主流程2的特别说明② |
empty | 由lock创建的Condition,用于连接足够时(不发生线程等待),阻塞主流程3的守护线程,解释参考主流程2的特别说明② |
activeConnectionLock | 活动连接重入锁,被借出去的连接称为active连接,这类连接在removeAbandoned开启时会被保存进下面的activeConnections里,利用该锁完成对其操作的安全性,参考主流程1和流程4.2 |
activeConnections(k-v) | 解释参考上面的描述,参考主流程1和流程4.2 |
表1-1
方法表:
testConnectionInternal | 测试连接可用性的基本方法,参考流程1.3 |
createPhysicalConnection | 新增真正的数据库物理连接,参考流程2.1 |
表1-2
DruidDataSource类
这个类也是druid连接池基础类,扩展了一些其父类的功能,几乎所有的有关连接池管理的操作都在此类完成。
属性表:
connectCount | 一共成功从该池获取了多少次连接(只要获取成功一次,就累加一次) |
recycleCount | 一共成功归还了多少次连接到该池(成功归还一次,累加一次) |
removeAbandonedCount | 在removeAbandoned开启的情况下,被检查后强制归还的连接数 |
connections(数组) | 最终池子里没有被使用的闲置连接存放的地方,类型是DruidConnectionHolder |
poolingCount | pollingCount就是指上面connections的真实数量 |
activeCount | 当前处于借出状态的连接数(也即是被拿出去使用的连接数),poolingCount+activeCount就是当前该池子里一共有多少个连接,不能超过maxActive,参考主流程3 |
discardCount | 被丢弃的连接数,触发丢弃的地方有很多,比如流程1.4、流程4.1 |
evictConnections(数组) | 参考流程4.1 |
keepAliveConnections(数组) | 参考流程4.1 |
createConnectionThread(线程) | 生产连接的守护线程,参考主流程3 |
destroyConnectionThread(线程) | 抛弃连接的守护线程,参考主流程4 |
logStatsThread(线程) | 打印连接池各项监控指标日志的守护线程,参考主流程2,默认关闭 |
initedLatch(CountDownLatch) | 倒计数器,用来保证createConnectionThread和destroyConnectionThread两个守护线程全部开启成功。 |
enable | 连接池对象是否可用,在连接池整体close后,该值为false,表示已关闭的连接池不可用。 |
keepAlive | 参考流程4.1 |
loadSpifilterSkip | 是否启用通过SPI机制加载责任链上的filter,默认开启 |
表2-1
方法表:
init | 初始化整个连接池,参考主流程2 |
initFromSPIServiceLoader | 通过SPI机制加载责任链中的filters |
initValidConnectionChecker | 初始化(适配)检测器,参考流程1.3中的init-checker |
createAndLogThread | 启动上面表2-1里的logStatsThread线程 |
createAndStartCreatorThread | 启动上面表2-1里的createConnectionThread线程 |
createAndStartDestroyThread | 启动上面表2-1里的destroyConnectionThread线程 |
getConnection | 获取连接方法,参考主流程1 |
getConnectionDirect | 获取连接方法(通过getConnection触发),参考主流程1 |
pollLast | 真正从池子里获取连接对象的方法(通过getConnectionDirect触发),参考流程1.2 |
putLast | 真正归还连接进池子的方法(通过recycle触发),参考主流程5 |
put | 新增连接对象放进池子里的方法,通过主流程3触发 |
close | 连接池关闭,不再提供服务,迅速干掉所有连接进入贤者模式。 |
recycle | 连接回收方法,通过下面DruidPooledConnection类的close方法触发,参考主流程5 |
shrink | 连接池瘦身,参考主流程4、流程4.1 |
removeAbandoned | 回收长期未回收的连接,默认关闭不检查,通过表1-1里的removeAbandoned属性控制 |
emptySignal | 触发表1-1里的empty执行signal,用于唤起主流程3新增连接 |
表2-2
DruidConnectionHolder类
最终存放进池子里的基本类型,该类持有驱动产生的真实Connection对象,同时提供一些连接池需要的标记性的属性。
属性表:
dataSource(DruidDataSource) | 本身包含一个持有自己实例的连接池对象 |
conn(Connection) | 真实的驱动连接对象 |
lastActiveTimeMillis | 上次活动时间,该值在归还连接时会被刷新一次,参考主流程5,除此之外在一句sql执行结束后,这个值也会被刷新 |
defaultReadOnly | 是否默认为只读模式,默认不是 |
defaultAutoCommit | 是否默认开启AutoCommit,默认开启 |
discard | 当前连接是否已被抛弃 |
表3-1
方法表:
reset | 在连接对象被归还时,由于使用时可能被业务代码人为的改动一些属性(比如autoCommit等)需要把一些属性重新置为默认值,就需要该方法 |
表3-2
DruidPooledConnection类
对外暴露给业务方的连接对象包装类,实际上其内部是包了一层上面的holder对象。
属性表:
conn(Connection) | 实际的驱动连接对象,通过下面持有的holder对象获得并赋值 |
holder(DruidConnectionHolder) | 持有的holder对象 |
disable | 标记是否可用 |
ownerThread | 标记最初获取到自己的那个线程(用于决定在close时走下方的close还是syncClose,参考主流程5) |
closed | 标记是否已被关闭 |
running | 标记是否正在运行中,running被置为true的地方,就是执行excute方法时。 |
abandoned | 标记是否已被检查并丢弃,参考流程4.2 |
表4-1
方法表:
close | 关闭该连接,将实际连接归还至连接池,参考主流程5 |
syncClose | 如果是别的线程执行close方法,就得启用该方法去做,该方法与上面close的区别就是加了锁控制,参考流程5 |
recycle | 实际触发datasource.recycle方法的方法,参考流程5 |
常规操作 | 有createStatement、commit、rollback等等常规操作,本篇文章不涉及到,仅做连接池的说明,暂时忽略。 |
表4-2
Druid-类图-属性表的更多相关文章
- MFC中属性表单和向导对话框的使用
每次在使用MFC创建一个框架时,需要一步步选择自己的程序的外观,基本功能等选项,最后MFC会生成一个基本的程序框架,这个就是向导对话框:而属性表单则是另外一种对话框,表单上有多个属性页,每点击某一页, ...
- 【软件设计】UML类图怎么看
前言 无论使用哪种语言,都离不开面向过程与面向对象两个流派,而类图是面向对象程序设计中至关重要的一种软件表达形式,如何看懂类图,并设计好的软件架构,是我们作为软件工程师必不可少的技能之一. 今天小黑把 ...
- 如何将Excel表批量赋值到ArcGIS属性表
情景再现 现需要将Excel表信息批量赋值(不是挂接)到Shp文件的属性表,两张表的字段.记录数一模一样,至于为什么会出现这样的问题,咱也不敢问,只有想个法子把它搞定! 原始的Excel信息表共57列 ...
- UML 用例图、顺序图、状态图、类图、包图、协作图、流程图
用例图.顺序图.状态图.类图.包图.协作图 面向对象的问题的处理的关键是建模问题.建模可以把在复杂世界的许多重要的细节给抽象出.许多建模工具封装了UML(也就是Unified Modeling La ...
- 我对uml类图关系的理解
uml类图的关系: 泛化关系也就是继承. 实现关系就是一个类实现另外一个接口. 依赖关系就是一个类使用了另外一个类,是一种使用关系,在这个类的某个服务中需要另外一个类来协助. 关联关系就是一类拥有另外 ...
- [转]看懂UML类图
这里不会将UML的各种元素都提到,我只想讲讲类图中各个类之间的关系: 能看懂类图中各个类之间的线条.箭头代表什么意思后,也就足够应对 日常的工作和交流: 同时,我们应该能将类图所表达的含义和最终的代码 ...
- 转:深入浅出UML类图(具体到代码层次)
深入浅出UML类图 作者:刘伟 ,发布于:2012-11-23,来源:CSDN 在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML ...
- UML类图画法及其之间的几种关系(转)
UML类图画法及其之间的几种关系 最近做重构项目,需要画一下类图,发现类图的画法及其之间的几种关系已经淡忘了很多,所以整理总结一下,有问题的地方大家可以一起讨论下. 文章目录如下: 类图画法 类之间的 ...
- 深入浅出UML类图(一)
在UML 2.0的13种图形中,类图是使用频率最高的UML图之一.Martin Fowler在其著作<UML Distilled: A Brief Guide to the Standard O ...
随机推荐
- (八十一)c#Winform自定义控件-时间轴-HZHControls
官网 http://www.hzhcontrols.com 前提 入行已经7,8年了,一直想做一套漂亮点的自定义控件,于是就有了本系列文章. GitHub:https://github.com/kww ...
- VMware Workstation15激活码
VG5HH-D6E04-0889Y-QXZET-QGUC8 亲测可用
- Java生鲜电商平台-统一格式返回的API架构设计与实战
Java生鲜电商平台-统一格式返回的API架构设计与实战 说明:随着互联网各岗位精细化分工的普及,出现了很多的系统架构设计,比如常见的前后端分离架构,后端提供接口给前端,前端根据接口的数据进行渲染,大 ...
- 47.QT-QChart之曲线图,饼状图,条形图使用
1.使用准备 在pro中, 添加QT+= charts 然后在界面头文件中添加头文件并声明命名空间,添加: #include <QtCharts> QT_CHARTS_USE_NAMES ...
- 网页添加Live2D看板娘简易教程
看板娘是一种职业和习惯称呼,也是ACGN次文化中的萌属性之一.简而言之就是小店的女服务生,也有“吸引顾客,招揽生意,提高人气”等作用类似品牌形象代言人的含义. 如果想在自己的博客上放一个呆萌的看板娘非 ...
- SpringCloud之Ribbon:负载均衡
Spring Cloud集成了Ribbon,结合Eureka,可实现客户端的负载均衡. 下面实现一个例子,结构下图所示. 一.服务器端 1.创建项目 开发工具:IntelliJ IDEA 2019.2 ...
- Mac录制或保存视频后如何放大?
想要在录制和拍摄视频后在喜欢的场景(例如Mark)中放大视频吗?本文将向您展示如何放大视频并通过裁剪视频和“平移和缩放”效果来制作Ken Burns效果.Filmora9是一款功能强大的视频编辑器,具 ...
- 13. Go 语言网络爬虫
Go 语言网络爬虫 本章将完整地展示一个应用程序的设计.编写和简单试用的全过程,从而把前面讲到的所有 Go 知识贯穿起来.在这个过程中,加深对这些知识的记忆和理解,以及再次说明怎样把它们用到实处.由本 ...
- Java之继承性
为什么要有继承 多个类中存在相同属性和行为时,将这些内容抽取到单独一个类中,那么多个类无需再定义这些属性和行为,只要继承那一个类即可.其中,多个类可以称为子类,单独那一个类称为父类.超类或者基类. 继 ...
- IT兄弟连 HTML5教程 CSS3揭秘 CSS3属性3
5 用户界面属性 在CSS3中,新的用户界面特性包括重设元素尺寸.盒尺寸及轮廓等.本小节着重介绍一下resize属性,只有Firefox 4和Safari 3浏览器支持此属性.resize属性可用于重 ...