druid1.2.8源码阅读:第三天
文章目录
- druid1.2.8源码阅读:第三天
-
- 一、创建连接
-
- 1.1 `init()`方法
-
- (1)`JdbcUtils.getDbType`
- (2)根据DbType设置`cacheServerConfiguration`
- (4)校验参数设置的是否正确
- (5)`initFromSPIServiceLoader()`
- (6)`resolveDriver();` 加载数据库驱动
- (7)`initCheck();`确实使用的是什么数据库
- (8)`initExceptionSorter();`
- (9)`initValidConnectionChecker();`
- (10)`validationQueryCheck();` 打印了几条配置参数的日志
- (11)创建`JdbcDataSourceStat`
- (12)数据库连接池中连接的转换数组定义
- (13)当initialSize 大于0时,初始化连接
- (14)`createAndLogThread();`
- (15)`createAndStartCreatorThread();`
- (16)`createAndStartDestroyThread()`
- (18)`registerMbean();`调用C++的方法
一、创建连接
Connection connection = dataSource.getConnection();
在druid中,实际获取的是DruidPooledConnection
。
1.1 init()
方法
如果连接池已经初始化了,直接返回:
if (inited) {
return;
}
加载数据库驱动:
根据传入的url判断,去加载哪种数据库驱动。
(1)JdbcUtils.getDbType
根据URL的前缀获取数据类型:比如DbType.mysql
,“mysql”
if (this.dbTypeName == null || this.dbTypeName.length() == 0) {
this.dbTypeName = JdbcUtils.getDbType(jdbcUrl, null);
}
(2)根据DbType设置cacheServerConfiguration
对于部分数据库,可以设置这个配置
if (dbType == DbType.mysql
|| dbType == DbType.mariadb
|| dbType == DbType.oceanbase
|| dbType == DbType.ads) {
boolean cacheServerConfigurationSet