Java连接池需借助第三方工具监控:Druid提供内置Web页面;HikariCP支持JMX或Micrometer+Prometheus+Grafana;还可通过自定义健康检查或日志辅助排查。

Java 中连接池本身不自带管理后台,需借助第三方连接池(如 HikariCP、Druid、Tomcat JDBC Pool)提供的监控端点或配套控制台来查看活动连接。核心思路是:启用监控功能 + 暴露指标接口 + 可视化接入(或直接调用 API 查看)。
使用 Druid 内置监控页面(最简单直观)
Druid 是少数自带 Web 管理后台的连接池,开箱即用:
- 添加 Druid 依赖(Maven):
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.23</version>
</dependency> - 在 application.yml 中启用监控:
spring:
datasource:
druid:
stat-view-servlet:
enabled: true
url-pattern: /druid/*
login-username: admin
login-password: 123456
- 启动应用后访问 http://localhost:8080/druid,登录即可看到“数据源”页签下的实时连接数、活跃连接、等待线程数、SQL 执行统计等。
- “活跃连接”列表会显示每个连接的创建时间、最后使用时间、执行 SQL、阻塞状态等,可直接定位慢连接或泄漏连接。
通过 JMX 查看 HikariCP 连接池状态(轻量无 UI)
HikariCP 不提供 Web 控制台,但默认开启 JMX 支持,适合集成到 Prometheus 或用 JConsole 查看:
Java Maven 项目审查工作流的通用输入处理。当 Java Maven 项目以 ZIP压缩包或 GitLab 仓库 URL 形式提供且需要...时使用。
- 确保 Hikari 配置中启用 JMX(Spring Boot 默认开启):
spring:
datasource:
hikari:
jmx-enabled: true - 启动应用后,用 JDK 自带的 JConsole 连接本地 JVM,在 MBeans 树中展开:
com.zaxxer.hikari:type=Pool (your-pool-name)
查看属性如:ActiveConnections、IdleConnections、TotalConnections、ThreadsAwaitingConnection。 - 也可通过代码获取(需注入
HikariDataSource):
int active = dataSource.getHikariPoolMXBean().getActiveConnections();
集成 Micrometer + Prometheus + Grafana(生产推荐)
适用于 Spring Boot 2.0+,统一采集所有组件指标(含连接池),适合大规模监控:
立即学习“Java免费学习笔记(深入)”;
- 添加依赖:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency> - 配置启用 Actuator 端点:
management:
endpoints:
web:
exposure:
include: health,info,metrics,prometheus
endpoint:
prometheus:
scrape-interval: 15s - 访问 /actuator/prometheus,搜索关键词:
hikaricp_connections_active、hikaricp_connections_idle、hikaricp_connections_pending
即可看到当前活动连接数(Gauge 类型)。 - 配合 Prometheus 抓取 + Grafana 面板,可绘制连接数趋势、告警超阈值(如 Active > 90% 最大值)。
手动日志/健康检查辅助排查
当监控不可用时,快速验证连接状态:
- 实现自定义健康指示器(Spring Boot):
返回active、idle、max等关键字段,访问/actuator/health或专用端点。 - 定期打印连接池状态(仅调试):
log.info("HikariCP active: {}, idle: {}, total: {}",
pool.getActiveConnections(), pool.getIdleConnections(), pool.getTotalConnections()); - 注意:避免高频打印;生产环境优先走标准监控链路。

















