Java中SQL监控一般通过代理模式实现,如下:
因此,最差情况是自行实现代理类,难度不大,只是所有接口方法都要实现一遍,纯体力活。
p6spy是一款Java开源监控工具,出来已经有十几年,应该算很成熟了,下面介绍p6spy的使用。
1.引入maven依赖,当前最新版本3.8.3
<dependency> <groupId>p6spy</groupId> <artifactId>p6spy</artifactId> <version>3.8.3</version> </dependency>
2.实现监控类
只要实现如下的接口类则可,logSQL方法已经可以获取必要的信息,实现类中直接使用就好。
package com.p6spy.engine.spy.appender; import com.p6spy.engine.logging.Category; public interface P6Logger { /** * Logs the {@code SQL}. * * @param connectionId * connection identifier. * @param now * current time. * @param elapsed * @param category * the category to be used for logging. * @param prepared * the prepared statement to be logged. * @param sql * the {@code SQL} to be logged. * @param url * the database url where the sql statement executed */ public void logSQL(int connectionId, String now, long elapsed, Category category, String prepared, String sql, String url); /** * Logs the stacktrace of the exception. * * @param e * exception holding the stacktrace to be logged. */ public void logException(Exception e); /** * Logs the text. * * @param text * to be logged */ public void logText(String text); /** * @param category * the category to be evaluated. * @return {@code true} if category is enabled. Otherwise returns * {@code false} */ public boolean isCategoryEnabled(Category category); }
3.配置
将p6spy项目下p6spy/src/main/assembly/individualFiles/spy.properties文件放到resources目录下或者classpath中,找到appender将类名修改为你自己的实现类,并去掉#:
#appender=com.p6spy.engine.spy.appender.FileLogger
其他所有配置都不用修改就可以监控到SQL。
4.修改Spring的配置
1) jdbc.driver 替换为 com.p6spy.engine.spy.P6SpyDriver
spring.datasource.driver-class-name=com.p6spy.engine.spy.P6SpyDriver
2) jdbc.url 替换为 jdbc:p6spy:mysql:/xxx
spring.datasource.url=jdbc:p6spy:mysql://XXX
XXX部分自行替换。至此,可以监控到SQL语句了。
p6spy项目地址: https://github.com/p6spy/p6spy
end.
加入《Java栈实战营》知识星球,参与讨论,更多实战代码分享,不就是几斤苹果,几个荣耀道具的事吗!
https://t.zsxq.com/RNzfi2j