连接池之HikariCP:HikariCP框架设计与功能使用分析(第一部分)
mhr18 2025-01-09 14:33 22 浏览 0 评论
HikariCP,以其卓越的性能和低延迟连接池技术,正成为Java开发者的优选。在这篇文章中,我将深入探讨其核心特性、最佳实践以及如何通过HikariCP优化数据库连接。无论您是数据库专家还是新手,HikariCP都能为您的项目带来显著的性能提升。
肖哥弹架构 跟大家“弹弹” 框架注解使用,需要代码关注
欢迎 点赞,关注,评论。
关注公号Solomon肖哥弹架构获取更多精彩内容
历史热点文章
- 28个验证注解,通过业务案例让你精通Java数据校验(收藏篇)
- Java 8函数式编程全攻略:43种函数式业务代码实战案例解析(收藏版)
- 69 个Spring mvc 全部注解:真实业务使用案例说明(必须收藏)
- 24 个Spring bean 全部注解:真实业务使用案例说明(必须收藏)
- MySQL索引完全手册:真实业务图文讲解17种索引运用技巧(必须收藏)
- 一个项目代码讲清楚DO/PO/BO/AO/E/DTO/DAO/ POJO/VO
HikariCP 介绍
HikariCP(Hikari Connection Pool)是一个高性能的 JDBC 连接池库,它提供了快速、可靠和轻量级的数据库连接池功能。HikariCP 以其卓越的性能和低开销而闻名,是许多现代 Java 应用程序的首选数据库连接池解决方案。
以下是 HikariCP 的一些主要特性:
- 核心层快速的连接获取:HikariCP 优化了连接获取的路径,减少了延迟,使得获取数据库连接更快。自动维护:它会自动维护连接池,包括连接的创建、销毁和重用。内置故障恢复:HikariCP 能够自动检测并恢复数据库连接,提高了应用程序的稳定性。
- 应用层配置简单:提供了简单直观的配置选项,可以很容易地集成到 Java 应用程序中。运维层监控和诊断:HikariCP 提供了多种监控和诊断工具,帮助开发者了解连接池的状态和性能。
- 扩展层支持多种数据库:与大多数流行的数据库兼容,如 MySQL、PostgreSQL、Oracle 等。
- 优势轻量级:相比于其他连接池实现,HikariCP 通常具有更小的内存占用和更快的响应时间。
如何使用 HikariCP
要在 Java 应用程序中使用 HikariCP,你需要添加以下依赖到你的项目中(以 Maven 为例):
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version> <!-- 请使用最新版本 -->
</dependency>
然后,你可以配置 HikariCP 并创建一个数据源:
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import javax.sql.DataSource;
public class DatabaseUtil {
public static DataSource getDataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/yourdatabase");
config.setUsername("username");
config.setPassword("password");
config.addDataSourceProperty("cachePrepStmts", "true");
config.addDataSourceProperty("prepStmtCacheSize", "250");
config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
HikariDataSource dataSource = new HikariDataSource(config);
return dataSource;
}
}
在上述代码中,我们创建了一个 HikariConfig 对象来配置连接池的各种参数,如 JDBC URL、用户名、密码以及一些特定的数据库设置。然后,我们使用这个配置创建了一个 HikariDataSource 实例,它将作为应用程序的数据源。
HikariCP 架构设计
架构设计
组件说明
- DataSource:数据源接口,用于 HikariCP 与应用程序之间的连接。
- HikariConfig:配置类,用于配置连接池的各种参数,如 JDBC URL、用户名、密码等。
- Connection Pool:连接池,负责管理数据库连接的生命周期,包括创建、销毁和重用。
- Connection Object:连接对象,表示单个数据库连接。
- Metadata Table:元数据表,用于记录连接池的状态和性能指标。
- Health Monitor:健康监控器,负责监控连接池的健康状况。
- Connection Monitor:连接监控器,用于检测和维护连接的有效性。
- Startup Check:启动检查,确保连接池在应用程序启动时正常工作。
- Leak Detector:泄漏检测器,用于检测并报告潜在的连接泄漏。
抽象层设计
HikariCP 的抽象层设计可以分为几个关键抽象组件,每个组件都封装了特定的功能和责任。以下是一个高层次的抽象层设计图,展示了 HikariCP 的核心抽象组件及其相互关系:
抽象组件说明
- DataSource:这是与应用程序代码直接交互的组件,它提供了获取数据库连接的接口。
- Connection Pool:这是 HikariCP 的核心组件,负责创建、管理和销毁数据库连接。它维护着一组数据库连接,并根据请求分配和回收这些连接。
- Physical Connection:表示实际的数据库连接。这些连接由连接池创建,并在需要时提供给应用程序使用。
- Database:代表后端数据库。物理连接通过执行 SQL 语句与之交互。
- Metrics:负责收集和记录连接池的性能指标,如连接获取时间、活跃连接数、空闲连接数等。
- Health Check:定期检查连接池的健康状况,包括执行连接验证和维护操作。
- Connection Validation:验证连接的有效性。如果连接不再有效,它会从池中移除或重新创建。
- Leak Detection:检测潜在的连接泄漏。如果应用程序未能正确关闭连接,泄漏检测器会报告这些问题。
HikariCP模块设计
模块设计
模块关系
HikariCP 连接池主要由以下几个模块组成,每个模块都有其特定的作用:
- 配置模块 (HikariConfig)作用:负责存储和管理连接池的所有配置参数,如 JDBC URL、用户名、密码、最大连接数、连接超时时间等。配置模块是连接池初始化和运行的基础。
- 数据源模块 (HikariDataSource)作用:作为连接池的入口,提供 DataSource 接口的实现。应用程序通过数据源获取数据库连接。数据源模块负责创建和管理连接池实例。
- 连接池管理器 (Connection Pool)作用:核心模块,负责创建、管理和销毁数据库连接。它维护着一个连接队列,并根据应用程序的请求分配和回收连接。
- 物理连接模块 (Physical Connections)作用:表示实际的数据库连接。连接池管理器会根据配置创建一定数量的物理连接,并在需要时与数据库建立真实的连接。
- 连接工厂 (Connection Factory)作用:负责创建和管理物理连接的生命周期。它定义了如何创建新连接、如何测试连接的有效性以及如何关闭连接。
- 连接提供者 (Connection Provider)作用:负责从连接池中获取连接并提供给应用程序使用。它还负责在应用程序使用完连接后将其回收到连接池中。
- 连接初始化器 (Connection Initializer)作用:负责初始化新创建的物理连接,包括设置数据库会话参数、执行初始化 SQL 语句等。
- 健康检查器 (Health Checker)作用:定期检查连接池中的连接是否仍然有效。如果发现无效连接,健康检查器会将其从连接池中移除。
- 空闲连接驱逐器 (Idle Connection Evictor)作用:定期检查并关闭超过指定空闲时间的连接,以维护连接池的健康状态并释放资源。
- 连接泄漏检测器 (Leak Detector)作用:监控和检测连接泄漏,即应用程序未正确关闭数据库连接的情况。泄漏检测器可以帮助开发者诊断和修复连接泄漏问题。
- 性能指标收集器 (Metrics Collector)作用:收集和记录连接池的性能指标,如连接获取时间、活跃连接数、空闲连接数等,以便于监控和优化。
- 线程池 (Executor Service)作用:用于执行连接池的定期任务,如健康检查、空闲连接驱逐等。线程池可以提高这些任务的执行效率。
框架执行流程
HikariCP 的框架执行流程设计涉及多个关键步骤,从配置初始化到连接的获取、使用、回收和维护。以下是一个高层次的流程设计图,展示了 HikariCP 的核心执行流程:
流程步骤
- 开始:启动应用程序,初始化 HikariCP 流程。
- 配置初始化:加载 HikariCP 配置参数,如 JDBC URL、用户名、密码、最大连接数等。
- 创建数据源 DataSource:根据配置创建 HikariCP 数据源对象。
- 连接池 Connection Pool 初始化:根据数据源配置初始化连接池。
- 等待连接请求:连接池准备好,等待应用程序的连接请求。
- 连接请求:应用程序请求数据库连接。
- 获取物理连接 Physical Connection:连接池分配一个可用的物理连接给应用程序。
- 执行数据库操作:应用程序使用获取的连接执行 SQL 查询或其他数据库操作。
- 连接回收至连接池:应用程序操作完成后,将连接返回给连接池。
- 检查连接有效性:连接池定期检查连接的有效性。
- 销毁无效连接:如果发现连接无效,连接池会销毁这些连接,并从池中移除。
- 执行定期维护任务:连接池执行定期的维护任务,如清理空闲连接、执行健康检查等。
- 连接池关闭:应用程序关闭时,关闭连接池,释放所有资源。
- 结束:HikariCP 流程结束。
整体工作流程原理图
工作流程原理说明
- 配置阶段:定义 HikariCP 的配置参数,如 JDBC URL、用户名、密码等。
- HikariConfig:HikariCP 的配置对象,存储所有连接池的配置信息。
- 初始化阶段:根据配置参数初始化 HikariCP 的主要组件。
- HikariDataSource:HikariCP 提供的数据源接口,用于获取数据库连接。
- Connection Pool:连接池,负责管理数据库连接的生命周期。
- Physical Connections:物理连接,实际的数据库连接。
- Database:数据库,后端数据库系统。
- Connection Acquisition:连接获取,应用程序请求数据库连接。
- Application Use:应用程序使用连接执行数据库操作。
- Connection Release:连接释放,应用程序操作完成后释放连接。
- Connection Validation:连接验证,检查连接是否仍然有效。
- Connection Replacement:连接替换,销毁无效连接并创建新的连接。
- Housekeeping:定期维护,执行定期清理和维护任务。
- Metrics Collection:性能指标收集,记录连接池的性能数据。
- Health Monitoring:健康监控,监控连接池的健康状况。
- Error Handling:异常处理,处理连接池运行中遇到的异常。
- System Logs:系统日志,记录异常和重要事件。
- Alerts:警报,向管理员发送通知。
HikariCP 组件执行时序图
时序图说明
- 配置参数设置:应用程序配置 HikariCP 的参数,如 JDBC URL、用户名、密码等。
- 创建 HikariDataSource 实例:使用配置参数创建 HikariDataSource 对象。
- 初始化连接池:HikariDataSource 初始化连接池,准备连接池所需的资源。
- 连接请求:应用程序请求数据库连接。
- 从连接池获取连接:HikariDataSource 从连接池中获取连接。
- 检查可用连接:连接池检查是否有可用的数据库连接。
- 返回连接:如果找到可用连接,连接池返回连接给 HikariDataSource。
- 创建新连接:如果没有可用连接,连接池创建新的数据库连接。
- 执行数据库操作:应用程序使用获取的连接执行数据库操作。
- 关闭连接:应用程序操作完成后,关闭连接。
- 连接回收至连接池:HikariDataSource 将连接回收至连接池。
- 检查连接有效性:连接池定期检查连接的有效性。
- 销毁无效连接:如果连接无效,连接池销毁无效连接,并尝试创建新连接。
- 定期维护(Housekeeping) :HikariDataSource 执行定期维护任务,如清理空闲连接、执行健康检查等。
- 定期执行数据库心跳检测:为了保持连接的活跃,HikariDataSource 定期向数据库发送心跳检测。
- 上一篇:python 连接oracle
- 下一篇:数据“入湖”,让资源变资产
相关推荐
- Java面试宝典之问答系列(java面试回答)
-
以下内容,由兆隆IT云学院就业部根据多年成功就业服务经验提供:1.写出从数据库表Custom中查询No、Name、Num1、Num2并将Name以姓名显示、计算出的和以总和显示的SQL。SELECT...
- ADG (Active Data Guard) 数据容灾架构下,如何配置 Druid 连接池?
-
如上图的数据容灾架构下,上层应用如果使用Druid连接池,应该如何配置,才能在数据库集群节点切换甚至主备数据中心站点切换的情况下,上层应用不需要变动(无需修改配置也无需重启);即数据库节点宕机/...
- SpringBoot多数据源dynamic-datasource快速入门
-
一、简介dynamic-datasourc是一个基于SpringBoot的快速集成多数据源的启动器,其主要特性如下:支持数据源分组,适用于多种场景纯粹多库读写分离一主多从混合模式。支持...
- SpringBoot项目快速开发框架JeecgBoot——项目简介及系统架构!
-
项目简介及系统架构JeecgBoot是一款基于SpringBoot的开发平台,它采用前后端分离架构,集成的框架有SpringBoot2.x、SpringCloud、AntDesignof...
- 常见文件系统格式有哪些(文件系统类型有哪几种)
-
PART.01常见文件系统格式有哪些常见的文件系统格式有很多,通常根据使用场景(Windows、Linux、macOS、移动设备、U盘、硬盘等)有所不同。以下是一些主流和常见的文件系统格式及其特点:一...
- Oracle MySQL Operator部署集群(oracle mysql group by)
-
以下是使用OracleMySQLOperator部署MySQL集群的完整流程及关键注意事项:一、部署前准备安装MySQLOperator通过Helm安装Operator到Ku...
- LibreOffice加入"转向Linux"运动
-
LibreOffice项目正准备削减部分Windows支持,并鼓励用户切换到Linux系统。自Oracle放弃OpenOffice后,支持和指导LibreOffice开发的文档基金会对未来有着明确的观...
- Oracle Linux 10发布:UEK 8.1、后量子加密、增强开发工具等
-
IT之家6月28日消息,科技媒体linuxiac昨日(6月27日)发布博文,报道称OracleLinux10正式发布,完全二进制兼容(binarycompatibility...
- 【mykit-data】 数据库同步工具(数据库同步工具 开源)
-
项目介绍支持插件化、可视化的数据异构中间件,支持的数据异构方式如下MySQL<——>MySQL(增量、全量)MySQL<——>Oracle(增量、全量)Oracle...
- oracle关于xml的解析(oracle读取xml节点的属性值)
-
有时需要在存储过程中处理xml,oracle提供了相应的函数来进行处理,xmltype以及相关的函数。废话少说,上代码:selectxmltype(SIConfirmOutput).extract...
- 如何利用DBSync实现数据库同步(通过dblink同步数据库)
-
DBSync是一款通用型的数据库同步软件,能侦测数据表之间的差异,能实时同步差异数据,从而使双方始终保持一致。支持各种数据库,支持异构同步、增量同步,且提供永久免费版。本文介绍其功能特点及大致用法,供...
- MYSQL存储引擎InnoDB(八十):InnoDB静态数据加密
-
InnoDB支持独立表空间、通用表空间、mysql系统表空间、重做日志和撤消日志的静态数据加密。从MySQL8.0.16开始,还支持为模式和通用表空间设置加密默认值,这允许DBA控制在这些模...
- JDK高版本特性总结与ZGC实践(jdk高版本兼容低版本吗)
-
美团信息安全技术团队核心服务升级JDK17后,性能与稳定性大幅提升,机器成本降低了10%。高版本JDK与ZGC技术令人惊艳,且JavaAISDK最低支持JDK17。本文总结了JDK17的主要...
- 4 种 MySQL 同步 ES 方案,yyds!(两个mysql数据库自动同步的方法)
-
本文会先讲述数据同步的4种方案,并给出常用数据迁移工具,干货满满!不BB,上文章目录:1.前言在实际项目开发中,我们经常将MySQL作为业务数据库,ES作为查询数据库,用来实现读写分离,...
- 计算机Java培训课程包含哪些内容?其实就这六大块
-
不知不觉秋天已至,如果你还处于就业迷茫期,不如来学习Java。对于非科班小白来说,Java培训会更适合你。提前了解下计算机Java培训课程内容,会有助于你后续学习。下面,我就从六个部分为大家详细介绍...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- Java面试宝典之问答系列(java面试回答)
- ADG (Active Data Guard) 数据容灾架构下,如何配置 Druid 连接池?
- SpringBoot多数据源dynamic-datasource快速入门
- SpringBoot项目快速开发框架JeecgBoot——项目简介及系统架构!
- 常见文件系统格式有哪些(文件系统类型有哪几种)
- Oracle MySQL Operator部署集群(oracle mysql group by)
- LibreOffice加入"转向Linux"运动
- Oracle Linux 10发布:UEK 8.1、后量子加密、增强开发工具等
- 【mykit-data】 数据库同步工具(数据库同步工具 开源)
- oracle关于xml的解析(oracle读取xml节点的属性值)
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)