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" />
或 Spring Boot 中:
立即学习“Java免费学习笔记(深入)”;
spring:
datasource:
druid:
filters: stat,wallstat 是必需的,负责采集执行次数、总耗时、最大耗时、错误数等;wall 可选,用于 SQL 防护。
让 SQL 耗时能关联到具体接口请求(可选但推荐)
Druid 默认按 SQL 文本聚合,不带请求路径信息。若想快速定位「哪个接口拖慢了数据库」,可配合 DruidWebStatFilter(适用于传统 SSM 项目):
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
<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”列)。
查看 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 或导出日志。
不复杂但容易忽略。

















