@Intercepts( { @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class}), @Signature(type = Executor.class, method = "query", args = {MappedStatement.class, Object.class, RowBounds.class, ResultHandler.class, CacheKey.class, BoundSql.class}), } ) @Component public class QueryInterceptor implements Interceptor { @Override public Object intercept(Invocation invocation) throws Throwable { Object[] args = invocation.getArgs(); MappedStatement ms = (MappedStatement) args[0]; Object parameter = args[1]; RowBounds rowBounds = (RowBounds) args[2]; ResultHandler resultHandler = (ResultHandler) args[3]; Executor executor = (Executor) invocation.getTarget(); CacheKey cacheKey; BoundSql boundSql; if(args.length == 4){ boundSql = ms.getBoundSql(parameter); cacheKey = executor.createCacheKey(ms, parameter, rowBounds, boundSql); } else { cacheKey = (CacheKey) args[4]; boundSql = (BoundSql) args[5]; } TimeInterval timer = DateUtil.timer(); Object obj= executor.query(ms, parameter, rowBounds, resultHandler, cacheKey, boundSql); Long time=timer.interval(); //大于5000毫秒 if(time>5000){ String sbRunOut= new StringBuilder() .append("\033[31m-----------慢sql记录-----------\033[0m").append(Tool.lin) .append("\033[33m 耗时:\033[0m").append(time).append("毫秒").append(Tool.lin) .append("\033[33m 语句:\033[0m").append(boundSql.getSql()).append(Tool.lin) .append("\033[33m 参数:\033[0m").append(boundSql.getParameterObject()).append(Tool.lin) .append("\033[31m-----------慢sql记录-----------\033[0m").append(Tool.lin) .toString(); String sbLogOut= new StringBuilder() .append("-----------慢sql记录-----------").append(Tool.lin) .append("耗时:").append(time).append("毫秒").append(Tool.lin) .append("语句:").append(boundSql.getSql()).append(Tool.lin) .append("参数:").append(boundSql.getParameterObject()).append(Tool.lin) .append("-----------慢sql记录-----------").append(Tool.lin) .toString(); //输出指定文件 Tool.logBydao.info(sbLogOut); //输出到控制台带彩色 Console.log(sbRunOut); } return obj; } @Override public Object plugin(Object target) { return Plugin.wrap(target, this); } @Override public void setProperties(Properties properties) { } }
springboot+pagehelper拦截慢sql
最新推荐文章于 2024-08-29 17:59:52 发布