百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术教程 > 正文

连接池之HikariCP:HikariCP框架设计与功能使用分析(第一部分)

mhr18 2025-01-09 14:33 16 浏览 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 连接池主要由以下几个模块组成,每个模块都有其特定的作用:

  1. 配置模块 (HikariConfig)作用:负责存储和管理连接池的所有配置参数,如 JDBC URL、用户名、密码、最大连接数、连接超时时间等。配置模块是连接池初始化和运行的基础。
  2. 数据源模块 (HikariDataSource)作用:作为连接池的入口,提供 DataSource 接口的实现。应用程序通过数据源获取数据库连接。数据源模块负责创建和管理连接池实例。
  3. 连接池管理器 (Connection Pool)作用:核心模块,负责创建、管理和销毁数据库连接。它维护着一个连接队列,并根据应用程序的请求分配和回收连接。
  4. 物理连接模块 (Physical Connections)作用:表示实际的数据库连接。连接池管理器会根据配置创建一定数量的物理连接,并在需要时与数据库建立真实的连接。
  5. 连接工厂 (Connection Factory)作用:负责创建和管理物理连接的生命周期。它定义了如何创建新连接、如何测试连接的有效性以及如何关闭连接。
  6. 连接提供者 (Connection Provider)作用:负责从连接池中获取连接并提供给应用程序使用。它还负责在应用程序使用完连接后将其回收到连接池中。
  7. 连接初始化器 (Connection Initializer)作用:负责初始化新创建的物理连接,包括设置数据库会话参数、执行初始化 SQL 语句等。
  8. 健康检查器 (Health Checker)作用:定期检查连接池中的连接是否仍然有效。如果发现无效连接,健康检查器会将其从连接池中移除。
  9. 空闲连接驱逐器 (Idle Connection Evictor)作用:定期检查并关闭超过指定空闲时间的连接,以维护连接池的健康状态并释放资源。
  10. 连接泄漏检测器 (Leak Detector)作用:监控和检测连接泄漏,即应用程序未正确关闭数据库连接的情况。泄漏检测器可以帮助开发者诊断和修复连接泄漏问题。
  11. 性能指标收集器 (Metrics Collector)作用:收集和记录连接池的性能指标,如连接获取时间、活跃连接数、空闲连接数等,以便于监控和优化。
  12. 线程池 (Executor Service)作用:用于执行连接池的定期任务,如健康检查、空闲连接驱逐等。线程池可以提高这些任务的执行效率。

框架执行流程

HikariCP 的框架执行流程设计涉及多个关键步骤,从配置初始化到连接的获取、使用、回收和维护。以下是一个高层次的流程设计图,展示了 HikariCP 的核心执行流程:

流程步骤

  1. 开始:启动应用程序,初始化 HikariCP 流程。
  2. 配置初始化:加载 HikariCP 配置参数,如 JDBC URL、用户名、密码、最大连接数等。
  3. 创建数据源 DataSource:根据配置创建 HikariCP 数据源对象。
  4. 连接池 Connection Pool 初始化:根据数据源配置初始化连接池。
  5. 等待连接请求:连接池准备好,等待应用程序的连接请求。
  6. 连接请求:应用程序请求数据库连接。
  7. 获取物理连接 Physical Connection:连接池分配一个可用的物理连接给应用程序。
  8. 执行数据库操作:应用程序使用获取的连接执行 SQL 查询或其他数据库操作。
  9. 连接回收至连接池:应用程序操作完成后,将连接返回给连接池。
  10. 检查连接有效性:连接池定期检查连接的有效性。
  11. 销毁无效连接:如果发现连接无效,连接池会销毁这些连接,并从池中移除。
  12. 执行定期维护任务:连接池执行定期的维护任务,如清理空闲连接、执行健康检查等。
  13. 连接池关闭:应用程序关闭时,关闭连接池,释放所有资源。
  14. 结束: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 组件执行时序图

时序图说明

  1. 配置参数设置:应用程序配置 HikariCP 的参数,如 JDBC URL、用户名、密码等。
  2. 创建 HikariDataSource 实例:使用配置参数创建 HikariDataSource 对象。
  3. 初始化连接池:HikariDataSource 初始化连接池,准备连接池所需的资源。
  4. 连接请求:应用程序请求数据库连接。
  5. 从连接池获取连接:HikariDataSource 从连接池中获取连接。
  6. 检查可用连接:连接池检查是否有可用的数据库连接。
  7. 返回连接:如果找到可用连接,连接池返回连接给 HikariDataSource。
  8. 创建新连接:如果没有可用连接,连接池创建新的数据库连接。
  9. 执行数据库操作:应用程序使用获取的连接执行数据库操作。
  10. 关闭连接:应用程序操作完成后,关闭连接。
  11. 连接回收至连接池:HikariDataSource 将连接回收至连接池。
  12. 检查连接有效性:连接池定期检查连接的有效性。
  13. 销毁无效连接:如果连接无效,连接池销毁无效连接,并尝试创建新连接。
  14. 定期维护(Housekeeping) :HikariDataSource 执行定期维护任务,如清理空闲连接、执行健康检查等。
  15. 定期执行数据库心跳检测:为了保持连接的活跃,HikariDataSource 定期向数据库发送心跳检测。

相关推荐

使用 Docker 部署 Java 项目(通俗易懂)

前言:搜索镜像的网站(推荐):DockerDocs1、下载与配置Docker1.1docker下载(这里使用的是Ubuntu,Centos命令可能有不同)以下命令,默认不是root用户操作,...

Spring Boot 3.3.5 + CRaC:从冷启动到秒级响应的架构实践与踩坑实录

去年,我们团队负责的电商订单系统因扩容需求需在10分钟内启动200个Pod实例。当运维组按下扩容按钮时,传统SpringBoot应用的冷启动耗时(平均8.7秒)直接导致流量洪峰期出现30%的请求超时...

《github精选系列》——SpringBoot 全家桶

1简单总结1SpringBoot全家桶简介2项目简介3子项目列表4环境5运行6后续计划7问题反馈gitee地址:https://gitee.com/yidao620/springbo...

Nacos简介—1.Nacos使用简介

大纲1.Nacos的在服务注册中心+配置中心中的应用2.Nacos2.x最新版本下载与目录结构3.Nacos2.x的数据库存储与日志存储4.Nacos2.x服务端的startup.sh启动脚...

spring-ai ollama小试牛刀

序本文主要展示下spring-aiollama的使用示例pom.xml<dependency><groupId>org.springframework.ai<...

SpringCloud系列——10Spring Cloud Gateway网关

学习目标Gateway是什么?它有什么作用?Gateway中的断言使用Gateway中的过滤器使用Gateway中的路由使用第1章网关1.1网关的概念简单来说,网关就是一个网络连接到另外一个网络的...

Spring Boot 自动装配原理剖析

前言在这瞬息万变的技术领域,比了解技术的使用方法更重要的是了解其原理及应用背景。以往我们使用SpringMVC来构建一个项目需要很多基础操作:添加很多jar,配置web.xml,配置Spr...

疯了!Spring 再官宣惊天大漏洞

Spring官宣高危漏洞大家好,我是栈长。前几天爆出来的Spring漏洞,刚修复完又来?今天愚人节来了,这是和大家开玩笑吗?不是的,我也是猝不及防!这个玩笑也开的太大了!!你之前看到的这个漏洞已...

「架构师必备」基于SpringCloud的SaaS型微服务脚手架

简介基于SpringCloud(Hoxton.SR1)+SpringBoot(2.2.4.RELEASE)的SaaS型微服务脚手架,具备用户管理、资源权限管理、网关统一鉴权、Xss防跨站攻击、...

SpringCloud分布式框架&amp;分布式事务&amp;分布式锁

总结本文承接上一篇SpringCloud分布式框架实践之后,进一步实践分布式事务与分布式锁,其中分布式事务主要是基于Seata的AT模式进行强一致性,基于RocketMQ事务消息进行最终一致性,分布式...

SpringBoot全家桶:23篇博客加23个可运行项目让你对它了如指掌

SpringBoot现在已经成为Java开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通...

开发好物推荐12之分布式锁redisson-sb

前言springboot开发现在基本都是分布式环境,分布式环境下分布式锁的使用必不可少,主流分布式锁主要包括数据库锁,redis锁,还有zookepper实现的分布式锁,其中最实用的还是Redis分...

拥抱Kubernetes,再见了Spring Cloud

相信很多开发者在熟悉微服务工作后,才发现:以为用SpringCloud已经成功打造了微服务架构帝国,殊不知引入了k8s后,却和CloudNative的生态发展脱轨。从2013年的...

Zabbix/J监控框架和Spring框架的整合方法

Zabbix/J是一个Java版本的系统监控框架,它可以完美地兼容于Zabbix监控系统,使得开发、运维等技术人员能够对整个业务系统的基础设施、应用软件/中间件和业务逻辑进行全方位的分层监控。Spri...

SpringBoot+JWT+Shiro+Mybatis实现Restful快速开发后端脚手架

作者:lywJee来源:cnblogs.com/lywJ/p/11252064.html一、背景前后端分离已经成为互联网项目开发标准,它会为以后的大型分布式架构打下基础。SpringBoot使编码配置...

取消回复欢迎 发表评论: