mybatis数据库连接池PooledDataSource及其原理图

pull/3/head
AmyliaY 5 years ago
parent b491bc004c
commit fd64c44844

@ -339,7 +339,42 @@ public class PoolState {
PooledDataSource管理的数据库连接对象 是由其持有的UnpooledDataSource对象创建的并由PoolState管理所有连接的状态。 PooledDataSource管理的数据库连接对象 是由其持有的UnpooledDataSource对象创建的并由PoolState管理所有连接的状态。
PooledDataSource的getConnection()方法会首先调用popConnection()方法获取PooledConnection对象然后通过PooledConnection的getProxyConnection()方法获取数据库连接的代理对象。popConnection()方法是PooledDataSource的核心逻辑之一其整体的逻辑关系如下图 PooledDataSource的getConnection()方法会首先调用popConnection()方法获取PooledConnection对象然后通过PooledConnection的getProxyConnection()方法获取数据库连接的代理对象。popConnection()方法是PooledDataSource的核心逻辑之一其整体的逻辑关系如下图
![avatar](/images/mybatis连接池获取连接逻辑图.png)
```java
public class PooledDataSource implements DataSource {
private static final Log log = LogFactory.getLog(PooledDataSource.class);
// 管理连接池状态 并统计连接信息
private final PoolState state = new PoolState(this);
// 该对象用于生成真正的数据库连接对象,构造函数中会初始化该字段
private final UnpooledDataSource dataSource;
// 最大活跃连接数
protected int poolMaximumActiveConnections = 10;
// 最大空闲连接数
protected int poolMaximumIdleConnections = 5;
// 最大Checkout时长
protected int poolMaximumCheckoutTime = 20000;
// 在无法获取连接时,线程需要等待的时间
protected int poolTimeToWait = 20000;
// 本地坏连接最大数
protected int poolMaximumLocalBadConnectionTolerance = 3;
// 检测数据库连接是否可用时给数据库发送的sql语句
protected String poolPingQuery = "NO PING QUERY SET";
// 是否允许发送上述语句
protected boolean poolPingEnabled;
// 当连接超过poolPingConnectionsNotUsedFor毫秒未使用
// 就发送一次上述sql检测连接连接是否正常
protected int poolPingConnectionsNotUsedFor;
// 根据数据库URL、用户名、密码 生成的一个hash值
// 该hash值用于标记当前的连接池在构造函数中初始化
private int expectedConnectionTypeCode;
}
```
## 2 Transaction ## 2 Transaction

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

Loading…
Cancel
Save