druid1.2.8源码悦读:第四天
文章目录
一、回顾getConnection()中的init()
在init()中,完成了三个动作:
- 加载数据库驱动;
- 创建了一个用于创建数据库连接的线程:
createConnectionThread; - 创建了一个用于销毁数据库连接的线程:
destroyConnectionThread
二、创建Connection:DruidPooledConnection
2.1 如果有filter,根据FilterChainImpl创建连接池
通过filter列表创建连接池:
- 创建
FilterChainImpl的时候,初始化pos为0
// 这里的this 是 DataSource
FilterChainImpl filterChain = new FilterChainImpl(this);
DruidPooledConnection connection = filterChain.dataSource_connect(this, maxWaitMillis);
-
递归调用
List<Filter> filters是在DataSource中创建出来的// 这里的this 是 FilterChainImpl filters.get(pos++).dataSource_getConnection(this, dataSoruce, maxWaitMillis); -
dataSource_getConnection可以看到这句话,进行了递归调用
DruidPooledConnection conn = chain.dataSource_connect(dataSource, maxWaitMillis);
可以看出穿过过滤器,最先调用的代码,又回到了:
dataSource.getConnectionDirect(maxWaitMillis);
331

被折叠的 条评论
为什么被折叠?



