数据库连接池以及HikariCP使用

数据库连接池以及HikariCP使用


文章目录


前言

数据库连接池(Database Connection Pool)是一种管理数据库连接的缓存机制,它预先创建一定数量的数据库连接,将这些连接保存在 "池" 中,当应用程序需要访问数据库时,直接从池中获取连接,使用完毕后再将连接归还给池(而非关闭)。这种机制能避免频繁创建和关闭连接的性能开销,同时控制并发连接数量,保护数据库稳定运行。


一、数据库连接池

1、为什么使用连接池?

直接使用 DriverManager 创建数据库连接存在明显缺陷:

性能损耗大:创建数据库连接需要经过 TCP 握手、权限认证等过程,耗时较长(通常毫秒级),频繁创建 / 关闭连接会严重影响系统性能。

资源浪费:每个连接对应数据库的一个会话,无限制创建连接会耗尽数据库资源(如内存、线程),导致数据库崩溃。

难以管理:无法控制并发连接数量,可能因瞬间高并发导致连接泛滥。

连接池通过复用连接和控制连接数量解决了这些问题,是生产环境中操作数据库的必备组件。

2、连接池的工作原理

初始化:连接池启动时,根据配置创建一定数量的数据库连接(最小连接数),作为 "空闲连接" 等待使用。
获取连接:当应用需要连接时,直接从池里取一个 "空闲连接",标记为 "活跃状态"。若没有空闲连接,且当前总连接数未达到最大连接数,则新建连接并分配。若已达最大连接数,请求会进入等待队列,超时后抛出异常(避免无限制阻塞)。
归还连接:应用使用完连接后,将其归还给池(重置连接状态,如关闭事务、清空参数),重新标记为 "空闲连接",供其他请求复用。
连接管理:连接池会定期检测 "空闲连接",关闭超时未使用的连接(释放资源),或在空闲连接不足时补充新连接(维持最小连接数)。

3、核心参数(以 HikariCP 为例)

连接池的性能很大程度上取决于参数配置,常用核心参数如下:

参数名 作用说明

minimumIdle 最小空闲连接数:池中长期保持的最少空闲连接(默认与maximumPoolSize相同)。

maximumPoolSize 最大连接数:池中允许的最大连接数量(核心参数,需根据数据库性能配置)。

connectionTimeout 连接超时时间:获取连接时的最大等待时间(默认 30 秒,超时抛出异常)。

idleTimeout 空闲超时时间:连接空闲超过此时长会被关闭(默认 10 分钟,需小于maxLifetime)。

maxLifetime 连接最大生命周期:连接存活超过此时长会被强制关闭(默认 30 分钟,避免连接失效)。

connectionTestQuery 连接测试语句:从池获取连接时,执行该 SQL 检测连接是否有效(如SELECT 1)。

二、常用连接池实现

1、目前主流的 Java 数据库连接池

有以下几种,推荐优先使用HikariCP或Druid:

连接池 特点
HikariCP 性能最优(Spring Boot 2.x 默认),轻量、启动快,配置简单,适合高并发场景。
Druid 阿里开源,功能丰富(监控、防 SQL 注入、日志),适合需要监控和安全防护的场景。
C3P0 老牌连接池,稳定性好但性能一般,逐渐被 HikariCP 替代。
DBCP Apache 开源,依赖 Commons Pool,性能中等,配置较繁琐。

2、实战示例

具体操作参考这篇博客:

链接: JDBC中C3P0、Druid、HikariCP 、DBCP连接池的jar包下载与IDEA配置

总结


总结

数据库连接池是高性能 Java 应用的基础组件,其核心价值是复用连接和控制资源。实际开发中,推荐使用 HikariCP(追求性能)或 Druid(需要监控),并根据业务场景合理配置参数,避免连接泄露和资源浪费。

相关推荐
不剪发的Tony老师15 分钟前
MySQL 9.5创新版发布,有哪些新功能?
数据库·mysql
布朗克1681 小时前
MySQL 及 SQL 注入详细说明
数据库·sql·mysql·1024程序员节
武子康1 小时前
Java-154 深入浅出 MongoDB 用Java访问 MongoDB 数据库 从环境搭建到CRUD完整示例
java·数据库·分布式·sql·mongodb·性能优化·nosql
Austindatabases2 小时前
DBA 从“修电脑的” 到 上演一套 “数据治理” 大戏 --- 维护DBA生存空间,体现个体价值
数据库·dba
LB21122 小时前
Redis黑马点评 day01
数据库·redis·缓存
白小筠2 小时前
创建Django项目
数据库·django·sqlite
扑克中的黑桃A4 小时前
金仓多模数据库平替MongoDB的电子证照国产化实践——从2TB数据迁移到1600+并发支撑
数据库
计算机毕业设计小帅4 小时前
【2026计算机毕业设计】基于Django的社区婴幼儿预防接种系统
数据库·django·课程设计
友友马4 小时前
『 数据库 』MySQL复习 - 内置函数详解
数据库·mysql
互联网中的一颗神经元5 小时前
小白python入门 - 6. Python 分支结构——逻辑决策的核心机制
开发语言·数据库·python