目录
1 Connection对象
经过几天的Druid连接池的源码的分析,重新梳理出Connection涉及到的主要对象以及对象间的依赖关系如下图所示:
-
DataSource是java.sql提供的数据源对象。
-
DruidAbstractDataSource和DruidDataSource则是Druid对数据源封装的核心的实现,其中包括初始化数据源的参数配置,读取DbType,初始化Driver,创建连接池的连接,回收连接池的连接,都在这两个对象实现。
-
DruidPooledConnection为客户端获取Druid连接提供出去的连接对象的封装,关闭以及创建PreparedStatement都由该对象提供。
-
DruidConnectionHolder[]为连接池,每次创建的DruidConnectionHolder的连接的对象都会缓存到该数据处理,DruidDataSource.init()执行后会先初始化所有连接对象放到该数组。客户端要获取连接会从该数组(池子)里获取,回收线程会循环扫描该数组里是否已存在待回收的对象进行回收。如果识别到连接为空或者不够最小连接会开启创建连接线程创建连接后放入该池子。
-
DruidConnectionHolder是Druid对Connection、Datasource、PreparedStatementPool等封装的对象。
-
Connection是java.sql提供的连接对象。
-
ConnectionProxyImpl为Connection对象的代理。
2 PreparedStatement对象
-
DruidPooledConnection为客户端获取到的使用的对象,拿到该对象后可创建 DruidPooledPreparedStatement。
-
DruidPooledPreparedStatement为Druid返回给到客户端使用的Stament对象,该对象提供了关闭、查询、更新、回收等核心方法。
-
PreparedStatementPool为Druid提供的Stament缓存对象,且用到LRUCache来缓存,当每一次使用完的PreparedStatementHolder(这个对象看下面解释)会放到该对象缓存,当使用的时候如果该缓存里由对象,则不再直接创建,当缓存已完,则会先清理老的对象。
-
PreparedStatementHolder为Druid对PreparedStament包装的对象。
-
PreparedStatement为java.sql提供的跟数据查询或者更新的对象。
-
PreparedStatementProxyImpl为PreparedStatement对象的代理。