druid监控spring mvc接口sql耗时的核心是监控接口调用过程中每条sql的执行情况,需三步协同:启用statfilter开启统计、通过druidwebstatfilter关联请求上下文、在/druid监控页查看sql及uri聚合视图。

Druid 监控 Spring MVC 接口执行 SQL 耗时,核心不是监控“接口”,而是监控“该接口调用过程中触发的每一条 SQL”。Spring MVC 本身不执行 SQL,SQL 是由 MyBatis(或 JDBC)在 Service/DAO 层执行的;Druid 作为数据源连接池,会拦截所有通过它获取的 Connection 和 Statement,从而统计真实 SQL 行为。
要准确看到某次 HTTP 请求(比如 /user/list)背后 SQL 的耗时,需三步协同:启用 Druid 统计能力 + 关联请求上下文 + 查看聚合视图。下面分关键环节说明:
启用 Druid 的 SQL 执行统计
必须在数据源配置中显式开启 StatFilter,这是 SQL 监控的基础:
<!-- applicationContext.xml 中 DruidDataSource 配置 --> <property name="filters" value="stat,wall"></property>
或 Spring Boot 中:
spring:
datasource:
druid:
filters: stat,wall
stat 是必需的,负责采集执行次数、总耗时、最大耗时、错误数等;wall 可选,用于 SQL 防护。
让 SQL 耗时能关联到具体接口请求(可选但推荐)
Druid 默认按 SQL 文本聚合,不带请求路径信息。若想快速定位「哪个接口拖慢了数据库」,可配合 DruidWebStatFilter(适用于传统 SSM 项目):
<filter><filter-name>DruidWebStatFilter</filter-name><filter-class>com.alibaba.druid.support.http.WebStatFilter</filter-class><init-param><param-name>exclusions</param-name><param-value>*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*</param-value></init-param></filter><filter-mapping><filter-name>DruidWebStatFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
它会在每个请求线程中记录 URL、User-Agent、执行时间等,并与后续 SQL 统计做轻量级关联(体现在监控页的「URI 监控」和「SQL 监控」中“URL”列)。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
查看 SQL 耗时详情:访问 Druid 监控页面
配置 StatViewServlet 暴露监控入口:
<servlet><servlet-name>DruidStatView</servlet-name><servlet-class>com.alibaba.druid.support.http.StatViewServlet</servlet-class><init-param><param-name>loginUsername</param-name><param-value>admin</param-value></init-param><init-param><param-name>loginPassword</param-name><param-value>123456</param-value></init-param></servlet><servlet-mapping><servlet-name>DruidStatView</servlet-name><url-pattern>/druid/*</url-pattern></servlet-mapping>
启动应用后,浏览器访问 http://localhost:8080/your-app/druid/,登录即可看到:
-
SQL 监控页:列出所有执行过的 SQL,含
- 执行次数
- 总耗时(ms)
- 平均耗时
- 最慢一次耗时
- “URL”列(若有 WebStatFilter)显示是哪个接口触发的
- 点击 SQL 可查看耗时分布直方图(如 0–1ms、1–10ms 区间各多少次)
URI 监控页:按请求路径(如
/order/detail)统计,显示该 URI 下的总请求数、SQL 执行总次数、SQL 总耗时、平均 SQL 耗时等,帮你一眼识别高 SQL 开销接口。Wall 监控页:若启用了
wall,还能看到被拦截的危险 SQL 及原因(如多语句、非法函数调用)。
注意几个实际细节
- 控制台打印 SQL(如 log4j 输出)仅适合开发阶段,不能替代 Druid 监控:它不聚合、无统计、无耗时分布、生产环境日志爆炸。
- Druid 统计基于连接池代理,必须确保所有 DAO 都走的是 Druid 数据源,而不是硬编码 DriverManager 或其他数据源。
- 如果用了 MyBatis,确保
SqlSessionFactoryBean的dataSource属性指向的是 Druid 数据源 Bean。 - 耗时数据是运行时采集的,重启应用后清零;如需持久化,需自行对接 Prometheus + Grafana 或导出日志。
不复杂但容易忽略。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










