- 1. 简介
- 1.1 基础
- 1.2 连接池运行原理
- 2. 基础配置
- 3. DruidDataSource详细配置
- 3.1 连接池初始化
- 3.2 连接(连接池中的)
- 3.3 连接的检测
- 3.4 其他(监控、记录......)
- 4. 定时查看连接池状态
- 5.连接池原理详解(转自某大佬的详细整理)
Druid是阿里的开源项目,是一个功能强大的数据库连接池。
1.2 连接池运行原理1)数据库连接池在初始化的时候会创建initialSize个连接,当有数据库操作时,会从池中取出一个连接; 如果当前池中正在使用的连接数等于maxActive,则会等待一段时间,等待其他操作释放掉某一个连接,
如果这个等待时间超过了maxWait,则会报错;
如果当前正在使用的连接数没有达到maxActive,则判断当前是否空闲连接,如果有则直接使用空闲连接,如果没有则新建立一个连接。
在连接使用完毕后,不是将其物理连接关闭,而是将其放入池中等待其他操作复用。
2)同时连接池内部有机制判断,如果当前的总的连接数少于miniIdle,则会建立新的空闲连接,以保证连接数得到miniIdle。
如果当前连接池中某个连接在空闲了timeBetweenEvictionRunsMillis时间后仍然没有使用,则被物理性的关闭掉。
有些数据库连接的时候有超时限制(mysql连接在8小时后断开),或者由于网络中断等原因,连接池的连接会出现失效的情况,
这时候设置一个testWhileIdle参数为true,可以保证连接池内部定时检测连接的可用性,不可用的连接会被抛弃或者重建,
最大情况的保证从连接池中得到的Connection对象是可用的。当然,为了保证绝对的可用性,你也可以使用testOnBorrow为true(即在获取Connection对象时检测其可用性),不过这样会影响性能。
| driver-class-name | 驱动包名称 |
|---|---|
| url | 数据库连接url |
| username | 用户名 |
| password | 密码 |
| type | 数据库连接池类型(一般会自动根据url识别) |
| 配置项 | 解释 |
|---|---|
| initial-size | 初始化连接池时的连接数量 |
| max-active | 最大连接数(就是常说的maxPoolSize) |
| min-idle | 最小连接数(就是常说的minPoolSize) |
| 配置项 | 解释 (单位都是毫秒) |
|---|---|
| max-wait | 从池中获取连接的最大等待时间 |
| time-between-eviction-runs-millis | 检查空闲连接的间隔 |
| min-evictable-idle-time-millis | 最小空闲,一个空闲连接至少可以保持该时间(超过就检测关闭) |
| max-evictable-idle-time-millis | 最大空闲,一个空闲连接超过该值会被杀掉(超过就强制关闭) |
| 配置项 | 解释 |
|---|---|
| validation-query | 检测连接存活时的 sql语句 |
| test-on-borrow | 服务向连接池申请连接时,检查该连接是否有效。高并发情况下, 这个动作相当消耗性能 |
| test-on-return | 当连接使用完之后,回收的时候会判断该连接是否还可用 |
| test-while-idle | 该参数只有在testOnBorrow是false时,60s检查一次空闲的连接是否有效 |
| filters | 监控统计拦截的filters ( stat是统计,wall是SQL防火墙,防SQL注入的,log4j是用来输出统计数据) |
| 配置项 | 解释 |
|---|---|
| connectionProperties | druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 记录慢SQL |
@Scheduled(cron = "0/50 * * * * ?")
public void logPoolStatus(){
System.out.println(new LocalDateTime() + "----- druid连接池状态 ");
for (Map.Entry entry : DruidStatManagerFacade.getInstance().getDataSourceStatDataList().get(0).entrySet()) {
System.out.println(entry.getKey() + " :" + entry.getValue());
}
}
注意点:
- ActiveCount + PoolingCount = 连接池当前所有的连接总数
Identity :1495761010 Name :DataSource-1495761010 DbType :mysql DriverClassName :com.mysql.cj.jdbc.Driver URL :jdbc:mysql://10.165.78.1:23307/octopus_workflow_ox2e?characterEncoding=utf-8&useSSL=false UserName :local_octopus_workflow_m9xv FilterClassNames :[com.alibaba.druid.filter.stat.StatFilter, com.alibaba.druid.wall.WallFilter, com.alibaba.druid.filter.logging.Log4j2Filter] WaitThreadCount :0 NotEmptyWaitCount :0 NotEmptyWaitMillis :0 PoolingCount :5 当前连接池中的连接数(注意:不包括已经被借走的连接) PoolingPeak :5 PoolingPeakTime :Thu Apr 28 11:52:30 CST 2022 ActiveCount :0 正在被使用的连接数(也就是被借走的) ActivePeak :2 ActivePeakTime :Thu Apr 28 11:52:43 CST 2022 InitialSize :5 MinIdle :5 MaxActive :20 QueryTimeout :0 TransactionQueryTimeout :0 LoginTimeout :0 ValidConnectionCheckerClassName :com.alibaba.druid.pool.vendor.MySqlValidConnectionChecker ExceptionSorterClassName :com.alibaba.druid.pool.vendor.MySqlExceptionSorter TestOnBorrow :false TestOnReturn :false TestWhileIdle :true DefaultAutoCommit :true DefaultReadOnly :null DefaultTransactionIsolation :null LogicConnectCount :45 LogicCloseCount :44 LogicConnectErrorCount :0 PhysicalConnectCount :6 PhysicalCloseCount :0 PhysicalConnectErrorCount :0 DiscardCount :1 ExecuteCount :86 ExecuteUpdateCount :33 ExecuteQueryCount :53 ExecuteBatchCount :0 ErrorCount :0 CommitCount :59 RollbackCount :0 PSCacheAccessCount :86 PSCacheHitCount :56 PSCacheMissCount :30 StartTransactionCount :39 TransactionHistogram :[J@63504592 ConnectionHoldTimeHistogram :[J@7fe9dae7 RemoveAbandoned :true ClobOpenCount :0 BlobOpenCount :6 KeepAliveCheckCount :0 KeepAlive :false FailFast :false MaxWait :60000 MaxWaitThreadCount :-1 PoolPreparedStatements :true MaxPoolPreparedStatementPerConnectionSize :20 MinEvictableIdleTimeMillis :300000 MaxEvictableIdleTimeMillis :600000 LogDifferentThread :true RecycleErrorCount :0 PreparedStatementOpenCount :30 PreparedStatementClosedCount :0 UseUnfairLock :false InitGlobalVariants :false InitVariants :false5.连接池原理详解(转自某大佬的详细整理)
https://blog.csdn.net/jb84006/article/details/119979999



