Druid源码阅读1-DruidDataSource之init()

本文深入解析了DruidDataSource的初始化过程,包括根据jdbcUrl判断数据库类型、参数校验、初始连接创建、LogStatsThread、CreateConnectionThread和DestroyConnectionThread的初始化。重点介绍了CreateConnectionThread的逻辑,如何在连接被丢弃时补充连接池并保持线程同步。

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

首先,在test中找到连接池的测试Demo

在DruidDataSource 这个类中,DruidConnectionHolder 数组存着所有池中的连接

private volatile DruidConnectionHolder[] connections;

接下来,看看getConnections()方法

 跟进init()方法看看初始化了什么,可以看到init 方法主要做了下面这些事情

1、根据jdbcUrl判断连接的数据库类型,获取对应的JdbcDriver以及初始化ConnectionChecker。ConnectionChecker会被用于校验连接是否正常。

2、校验参数,主要包括initialSize、maxActive等参数是否合理。
3、初始化 initialSize 个数据库连接,有同步和异步两种方式。可以通过参数配置控制。
4、初始化三个线程

1)LogStatsThread。主要用于周期性的打印dataSource状态。如活跃连接数等。
2)CreateConnectionThread。主要用于补充连接池中的连接。
3)DestroyConnectionThread。用于执行removeAbandoned逻辑。它会判断在activeConnections里的所有连接,如果连接上一次被取用的时间到当前时间的差值大于removeAbandonedTime

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值