多迈知识库
第二套高阶模板 · 更大气的阅读体验

连接池在项目中怎么用 使用技巧与常见问题解析

发布时间:2026-01-18 04:50:30 阅读:371 次

连接解决的实际问题

开发 Web 项目时,数据库访问是家常便饭。比如做一个电商后台,用户下单、查库存、更新订单状态,每一步都要连数据库。如果每次操作都新建一个数据库连接,用完就关,那系统早就扛不住了。就像高峰期打车,每人临时叫一辆,司机来回跑空,效率低还浪费资源。

连接池就是为了解决这个问题。它提前创建一批数据库连接,放在“池子”里备用。需要用的时候直接从池子里拿,用完不是销毁,而是还回去,下次还能用。这样既避免频繁建立和断开连接的开销,又能控制最大并发数,防止数据库被拖垮。

常见连接池选型

Java 项目里最常用的有 HikariCP、Druid 和 C3P0。HikariCP 性能强、轻量,Spring Boot 默认就是它。Druid 功能更全,自带监控页面,适合需要排查 SQL 性能的场景。C3P0 老项目见得多,但现在基本被前两者替代。

比如你接手一个老系统,发现配置里写着 C3P0,连接慢还经常超时,换成 HikariCP 后,接口响应快了一半,这就是选对工具的差别。

Spring Boot 中配置 HikariCP

在 application.yml 里加上数据源配置就行:

spring:
datasource:
url: jdbc:mysql://localhost:3306/test_db?useUnicode=true&characterEncoding=utf8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000

maximum-pool-size 控制最多多少个连接,别设太大,不然数据库吃不消。minimum-idle 是池子里最少留几个空闲连接,保证突发请求能快速响应。后面的超时时间按实际网络情况调,别让坏连接占着位置。

Druid 的监控能力

要是你想看谁查了慢 SQL,哪个接口调用次数最多,Druid 的监控页就很实用。加个依赖:

<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.8</version>
</dependency>

再配个监控入口:

spring:
datasource:
type: com.alibaba.druid.pool.DruidDataSource
druid:
stat-view-servlet:
url-pattern: /druid/*
login-username: admin
login-password: admin

启动后访问 /druid,输入账号密码,就能看到实时 SQL 执行情况、连接使用率、慢查询统计。上线后发现数据库负载高,进去一看,原来是某个报表接口没加索引,扫了全表,问题一目了然。

连接泄漏怎么防

用完连接不归还,池子迟早枯竭。常见原因是代码异常跳出了,没执行 close()。连接池一般都有检测机制,比如 HikariCP 的 leak-detection-threshold:

spring:
datasource:
hikari:
leak-detection-threshold: 60000

单位是毫秒,这里设的是 60 秒。如果某个连接借出去超过一分钟还没还,日志就会报警。开发时开着这个,配合测试压一压,很容易揪出那些忘了释放连接的地方。

不同环境区分配置

本地开发可能就一个连接够用了,但生产环境得撑住并发。可以用 Spring 的多 profile 管理:

# application-dev.yml
spring:
datasource:
hikari:
maximum-pool-size: 5
# application-prod.yml
spring:
datasource:
hikari:
maximum-pool-size: 20
connection-timeout: 10000

上线前切到 prod 环境跑一遍集成测试,确保配置生效。别等到线上卡了才想起来改,那时候用户早就投诉了。