数据库连接池以及HikariCP使用
数据库连接池以及HikariCP使用
文章目录
- 数据库连接池以及HikariCP使用
- 前言
- 一、数据库连接池
- 1、为什么使用连接池?
- 2、连接池的工作原理
- 3、核心参数(以 HikariCP 为例)
- 二、常用连接池实现
- 1、目前主流的 Java 数据库连接池
- 2、实战示例
- 总结
前言
数据库连接池(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(需要监控),并根据业务场景合理配置参数,避免连接泄露和资源浪费。