Error querying database. Cause: org.springframework.jdbc.CannotGetJdbcConnectionException: Failed to obtain JDBC Connection; nested exception is java.sql.SQLTransientConnectionException: HikariPool-1 - Connection is not available, request timed out after 30001ms.
时间: 2025-07-01 11:55:17 浏览: 8
### 数据库连接异常排查:Spring框架环境下无法获取JDBC连接
在使用 Spring 框架结合 HikariCP 连接池时,若出现 `CannotGetJdbcConnectionException` 异常,并伴随 `SQLTransientConnectionException` 错误信息,表明应用无法从数据库连接池中获取可用连接,导致请求超时。例如日志中显示:
```
HikariPool-1 - Connection is not available, request timed out after 30061ms.
```
此类问题通常涉及以下几个方面:
#### 网络与数据库服务状态
首先需确认数据库服务是否正常运行,以及网络连接是否稳定。如果数据库服务器宕机或网络中断,会导致所有连接请求失败。可通过手动尝试建立数据库连接进行验证,例如使用命令行工具或数据库客户端[^1]。
#### 连接池配置不合理
HikariCP 的连接池大小配置过小可能导致并发请求高峰时无法满足需求,进而触发连接等待和超时。建议检查以下参数:
- `maximumPoolSize`:最大连接数,应根据系统负载合理设置。
- `connectionTimeout`:连接超时时间,单位为毫秒,默认为 30 秒。
- `idleTimeout`:空闲连接回收时间。
- `maxLifetime`:连接最大存活时间,避免连接长时间未释放而失效[^5]。
示例配置如下:
```yaml
spring:
datasource:
hikari:
maximum-pool-size: 20
connection-timeout: 60000
idle-timeout: 600000
max-lifetime: 1800000
```
#### 数据库连接泄漏
若未正确关闭数据库连接(如未关闭 ResultSet、Statement 或 Connection),将导致连接池中的资源被持续占用,最终耗尽连接池。建议通过 AOP 或日志监控追踪连接使用情况,确保每次操作后都正确释放资源[^3]。
#### 防火墙或安全策略限制
数据库端口可能被防火墙阻止访问,或数据库配置了 IP 白名单限制,导致连接请求被拒绝。可使用 `telnet` 或 `nc` 命令测试数据库端口的可达性:
```bash
telnet <db-host> <db-port>
```
若无法连通,则需检查防火墙规则或数据库访问控制策略[^4]。
#### 数据库性能瓶颈
当数据库负载过高,响应延迟增加,也会导致连接池获取连接超时。此时可通过慢查询优化、索引调整、读写分离等方式提升数据库性能。此外,也可通过监控工具查看数据库的 CPU、内存、IO 使用情况,判断是否存在瓶颈[^3]。
---
###
阅读全文
相关推荐










