连接池(Connection Pool)是一种用于管理数据库连接或其他资源连接的技术,它预先创建并维护一组可重用的连接对象,而不是在每次需要时都新建连接。
HikariCP (Java)
java
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
config.setUsername("user");
config.setPassword("password");
config.setMaximumPoolSize(10);
HikariDataSource ds = new HikariDataSource(config);
Druid (Java)
java
DruidDataSource ds = new DruidDataSource();
ds.setUrl("jdbc:mysql://localhost:3306/mydb");
ds.setUsername("user");
ds.setPassword("password");
ds.setMaxActive(20);
c3p0 (Java)
xml
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="com.mysql.jdbc.Driver"/>
<property name="jdbcUrl" value="jdbc:mysql://localhost:3306/mydb"/>
<property name="user" value="user"/>
<property name="password" value="password"/>
<property name="maxPoolSize" value="15"/>
</bean>
HTTP连接池 (如Apache HttpClient)
PoolingHttpClientConnectionManager cm = new PoolingHttpClientConnectionManager();
cm.setMaxTotal(200); // 最大连接数
cm.setDefaultMaxPerRoute(20); // 每个路由最大连接数
CloseableHttpClient httpClient = HttpClients.custom().setConnectionManager(cm).build();
Redis连接池 (如Jedis)
JedisPoolConfig poolConfig = new JedisPoolConfig();
poolConfig.setMaxTotal(128);
poolConfig.setMaxIdle(32);
JedisPool jedisPool = new JedisPool(poolConfig, "localhost");
参数 | 说明 | 建议值 |
---|---|---|
初始连接数 | 连接池启动时创建的连接数 | 根据平均负载设置 |
最大连接数 | 连接池能维持的最大连接数 | 根据数据库能力和应用需求 |
最小空闲连接 | 保持的最小空闲连接数 | 略高于平均负载 |
最大空闲连接 | 保持的最大空闲连接数 | 避免过多闲置资源 |
连接超时时间 | 获取连接的最大等待时间 | 根据业务容忍度 |
连接最大存活时间 | 连接被回收前的存活时间 | 防止长时间使用导致的问题 |
空闲连接检测间隔 | 检查空闲连接的时间间隔 | 平衡性能和及时性 |
选择合适的连接池大小
连接数 = (核心数 * 2) + 有效磁盘数
连接泄漏防护
// 使用try-with-resources确保连接关闭
try (Connection conn = dataSource.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT ...")) {
// 处理结果
}
监控与调优
多数据源场景
故障处理
问题1:连接泄漏 - 现象:连接数逐渐达到上限,应用变慢 - 解决:添加连接泄漏检测,使用代码审查工具检查资源关闭
问题2:连接池耗尽 - 现象:获取连接超时 - 解决:增加连接池大小,优化慢查询,缩短事务时间
问题3:连接失效 - 现象:获取到无效连接 - 解决:配置连接测试查询,设置合理的存活时间
问题4:连接池初始化慢 - 现象:应用启动时间长 - 解决:预热连接池,异步初始化
连接池是后端性能优化的关键组件,合理配置和使用可以显著提升系统性能和稳定性。