IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> Java——Druid -> 正文阅读

[大数据]Java——Druid

1. 简介

1.1 基础

Druid是阿里的开源项目,是一个功能强大的数据库连接池。

1.2 连接池运行原理

1)数据库连接池在初始化的时候会创建initialSize个连接,当有数据库操作时,会从池中取出一个连接;  如果当前池中正在使用的连接数等于maxActive,则会等待一段时间,等待其他操作释放掉某一个连接,
  如果这个等待时间超过了maxWait,则会报错;
  如果当前正在使用的连接数没有达到maxActive,则判断当前是否空闲连接,如果有则直接使用空闲连接,如果没有则新建立一个连接。
  在连接使用完毕后,不是将其物理连接关闭,而是将其放入池中等待其他操作复用。

2)同时连接池内部有机制判断,如果当前的总的连接数少于miniIdle,则会建立新的空闲连接,以保证连接数得到miniIdle。
  如果当前连接池中某个连接在空闲了timeBetweenEvictionRunsMillis时间后仍然没有使用,则被物理性的关闭掉。
  有些数据库连接的时候有超时限制(mysql连接在8小时后断开),或者由于网络中断等原因,连接池的连接会出现失效的情况,
  这时候设置一个testWhileIdle参数为true,可以保证连接池内部定时检测连接的可用性,不可用的连接会被抛弃或者重建,
  最大情况的保证从连接池中得到的Connection对象是可用的。当然,为了保证绝对的可用性,你也可以使用testOnBorrow为true(即在获取Connection对象时检测其可用性),不过这样会影响性能。

2. 基础配置

driver-class-name驱动包名称
url数据库连接url
username用户名
password密码
type数据库连接池类型(一般会自动根据url识别)

3. DruidDataSource详细配置

3.1 连接池初始化

配置项解释
initial-size初始化连接池时的连接数量
max-active最大连接数(就是常说的maxPoolSize)
min-idle最小连接数(就是常说的minPoolSize)

3.2 连接(连接池中的)

配置项解释 (单位都是毫秒)
max-wait从池中获取连接的最大等待时间
time-between-eviction-runs-millis检查空闲连接的间隔
min-evictable-idle-time-millis最小空闲,一个空闲连接至少可以保持该时间(超过就检测关闭)
max-evictable-idle-time-millis最大空闲,一个空闲连接超过该值会被杀掉(超过就强制关闭)

3.3 连接的检测

配置项解释
validation-query检测连接存活时的 sql语句
test-on-borrow服务向连接池申请连接时,检查该连接是否有效。高并发情况下, 这个动作相当消耗性能
test-on-return当连接使用完之后,回收的时候会判断该连接是否还可用
test-while-idle该参数只有在testOnBorrow是false时,60s检查一次空闲的连接是否有效
filters监控统计拦截的filters ( stat是统计,wall是SQL防火墙,防SQL注入的,log4j是用来输出统计数据)

3.4 其他(监控、记录…)

配置项解释
connectionPropertiesdruid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000 记录慢SQL

4. 定时查看连接池状态

	@Scheduled(cron = "0/50 * * * * ?")
	public void logPoolStatus(){
		System.out.println(new LocalDateTime() + "----- druid连接池状态 ");
		for (Map.Entry<String, Object> entry : DruidStatManagerFacade.getInstance().getDataSourceStatDataList().get(0).entrySet()) {
			System.out.println(entry.getKey() + " :" + entry.getValue());
		}
	}

注意点:

  1. ActiveCount + PoolingCount = 连接池当前所有的连接总数
Identity1495761010
NameDataSource-1495761010
DbType :mysql
DriverClassNamecom.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]
WaitThreadCount0
NotEmptyWaitCount0
NotEmptyWaitMillis0
PoolingCount5			当前连接池中的连接数(注意:不包括已经被借走的连接)
PoolingPeak5
PoolingPeakTimeThu Apr 28 11:52:30 CST 2022
ActiveCount0				正在被使用的连接数(也就是被借走的)    
ActivePeak2
ActivePeakTimeThu Apr 28 11:52:43 CST 2022
InitialSize5
MinIdle5
MaxActive20
QueryTimeout0
TransactionQueryTimeout0
LoginTimeout0
ValidConnectionCheckerClassNamecom.alibaba.druid.pool.vendor.MySqlValidConnectionChecker
ExceptionSorterClassNamecom.alibaba.druid.pool.vendor.MySqlExceptionSorter
TestOnBorrowfalse
TestOnReturnfalse
TestWhileIdletrue
DefaultAutoCommittrue
DefaultReadOnlynull
DefaultTransactionIsolationnull
LogicConnectCount45
LogicCloseCount44
LogicConnectErrorCount0
PhysicalConnectCount6
PhysicalCloseCount0
PhysicalConnectErrorCount0
DiscardCount1
ExecuteCount86
ExecuteUpdateCount33
ExecuteQueryCount53
ExecuteBatchCount0
ErrorCount0
CommitCount59
RollbackCount0
PSCacheAccessCount86
PSCacheHitCount56
PSCacheMissCount30
StartTransactionCount39
TransactionHistogram[J@63504592
ConnectionHoldTimeHistogram[J@7fe9dae7
RemoveAbandonedtrue
ClobOpenCount0
BlobOpenCount6
KeepAliveCheckCount0
KeepAlivefalse
FailFastfalse
MaxWait60000
MaxWaitThreadCount-1
PoolPreparedStatementstrue
MaxPoolPreparedStatementPerConnectionSize20
MinEvictableIdleTimeMillis300000
MaxEvictableIdleTimeMillis600000
LogDifferentThreadtrue
RecycleErrorCount0
PreparedStatementOpenCount30
PreparedStatementClosedCount0
UseUnfairLockfalse
InitGlobalVariantsfalse
InitVariantsfalse

5.连接池原理详解(转自某大佬的详细整理)

https://blog.csdn.net/jb84006/article/details/119979999

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-29 12:12:55  更:2022-04-29 12:14:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 1:10:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码