Spring 连接池配置详解
连接池是数据库访问性能优化的核心组件,合理配置直接影响系统吞吐量。
主流连接池对比
| 特性 | HikariCP | Druid | C3P0 |
|---|---|---|---|
| 性能 | 最高 | 高 | 低 |
| 监控 | 基础 | 完善 | 基础 |
| 配置复杂度 | 简单 | 中等 | 复杂 |
HikariCP 配置
基础配置
YAML
spring:
datasource:
hikari:
maximum-pool-size: 20
minimum-idle: 5
connection-timeout: 30000
idle-timeout: 600000
max-lifetime: 1800000
pool-name: MyHikariPool
核心参数详解
| 参数 | 默认值 | 说明 |
|---|---|---|
| maximum-pool-size | 10 | 最大连接数 |
| minimum-idle | 同 maximum | 最小空闲连接数 |
| connection-timeout | 30000ms | 获取连接超时时间 |
| idle-timeout | 600000ms | 空闲连接存活时间 |
| max-lifetime | 1800000ms | 连接最大存活时间 |
Druid 配置
Maven 依赖
XML
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.20</version>
</dependency>
配置示例
YAML
spring:
datasource:
druid:
initial-size: 5
min-idle: 5
max-active: 20
max-wait: 60000
time-between-eviction-runs-millis: 60000
min-evictable-idle-time-millis: 300000
validation-query: SELECT 1
test-while-idle: true
test-on-borrow: false
test-on-return: false
pool-prepared-statements: true
max-pool-prepared-statement-per-connection-size: 20
连接数计算公式
Java
连接数 = (核心数 * 2) + 有效磁盘数
对于 CPU 密集型应用,连接数可适当减少;对于 IO 密集型应用,可适当增加。
性能优化建议
1. 连接池大小
YAML
// 生产环境推荐配置
// CPU: 8核, 磁盘: 1块SSD
// 最优连接数 ≈ (8 * 2) + 1 = 17
maximum-pool-size: 20
minimum-idle: 5
2. 超时设置
YAML
spring:
datasource:
hikari:
connection-timeout: 30000 # 获取连接超时
idle-timeout: 600000 # 空闲连接超时
max-lifetime: 1800000 # 连接最大生命周期
connection-test-query: SELECT 1
3. 连接泄露检测
YAML
spring:
datasource:
hikari:
leak-detection-threshold: 60000 # 连接泄露检测阈值
监控配置
Druid 监控
Java
spring:
datasource:
druid:
stat-view-servlet:
enabled: true
url-pattern: /druid/*
login-username: admin
login-password: admin
web-stat-filter:
enabled: true
url-pattern: /*
HikariCP 监控
text
@Bean
public HikariDataSource dataSource(DataSourceProperties properties) {
HikariDataSource dataSource = properties.initializeDataSourceBuilder()
.type(HikariDataSource.class).build();
// 通过 JMX 监控
dataSource.setRegisterMbeans(true);
return dataSource;
}
要点总结
| 要点 | 说明 |
|---|---|
| 连接数公式 | (CPU核心数 × 2) + 有效磁盘数 |
| 最小空闲 | 设置合理值避免频繁创建 |
| 超时时间 | connection-timeout 不宜过长 |
| 监控 | 生产环境必须开启监控 |
| 泄露检测 | 开发环境开启,定位问题 |
📝 发现内容有误?点击此处直接编辑