Mybatis拦截器实现SQL性能监控
来源:互联网 发布:java纯数字正则表达式 编辑:程序博客网 时间:2024/05/21 07:54
Mybatis拦截器实现SQL性能监控
Mybatis拦截器只能拦截四类对象,分别为:Executor、ParameterHandler、StatementHandler、ResultSetHandler,而SQL数据库的操作都是从Executor开始,因此要记录Mybatis数据库操作的耗时,需要拦截Executor类,代码实现如下:
/** * 数据库操作性能拦截器,记录耗时 * @Intercepts定义Signature数组,因此可以拦截多个,但是只能拦截类型为: * Executor * ParameterHandler * StatementHandler * ResultSetHandler * */@Intercepts(value = { @Signature (type=Executor.class, method="update", args={MappedStatement.class,Object.class}), @Signature(type=Executor.class, method="query", args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class, CacheKey.class,BoundSql.class}), @Signature(type=Executor.class, method="query", args={MappedStatement.class,Object.class,RowBounds.class,ResultHandler.class})})public class TimerInterceptor implements Interceptor { private static final Logger logger = Logger.getLogger(TimerInterceptor.class); /** * 实现拦截的地方 * */ @Override public Object intercept(Invocation invocation) throws Throwable { Object target = invocation.getTarget(); Object result = null; if (target instanceof Executor) { long start = System.currentTimeMillis(); Method method = invocation.getMethod(); /**执行方法*/ result = invocation.proceed(); long end = System.currentTimeMillis(); logger.info("[TimerInterceptor] execute [" + method.getName() + "] cost [" + (end - start) + "] ms"); } return result; } /** * Plugin.wrap生成拦截代理对象 * */ @Override public Object plugin(Object target) { return Plugin.wrap(target, this); } @Override public void setProperties(Properties properties) { }}
完成上面的拦截后,需要将该类在Mybatis配置文件中声明,如下:
<plugins> <!-- SQL性能拦截器 --> <plugin interceptor="com.quar.interceptor.TimerInterceptor" /></plugins>
0 0
- Mybatis拦截器实现SQL性能监控
- Mybatis拦截器实现SQL性能监控
- Mybatis拦截器实现SQL性能监控
- Mybatis 拦截器实现SQL性能监控配置
- Mybatis SQL拦截器实现
- mybatis 拦截器拦截所有sql
- mybatis的拦截器实现统计分析sql的执行时间
- mybatis的拦截器实现统计分析sql的执行时间
- MyBatis拦截器实现分页
- Mybatis拦截器实现分页
- Mybatis拦截器实现分页
- 用MyBatis拦截器记录SQL执行时间
- mybatis 拦截器获取sql语句
- 基于Spring的Controller拦截器做性能监控
- Mybatis使用拦截器自动分页实现/使用反射替换sql代码分页
- (ThreadLocal版本)Mybatis使用拦截器自动分页实现/使用反射替换sql代码分页
- Mybatis学习- 拦截器-实现分页
- mybatis拦截器实现原理解析
- jQuery的on("change",function{})方法IF_CASE_CONFIRMED.on("change", function() {})
- deque容器
- ionic2热更新插件cordova-hot-code-push-plugin更新下载文件
- mysql数据库列基本的增删查改语句
- apache 的 commons-net-3.3.jar 的 ftp java代码上传下载文件
- Mybatis拦截器实现SQL性能监控
- 简单的PHP二维数组排序方法
- 012-docker的构建上下文
- kafka概述
- 针对不同的屏幕尺寸生成不同的大小
- 013-Dockerfile构建失败时怎么办
- python 自然语言处理 代码实现(批量读取,分词,词向量化)
- base_conv_layer.cpp中的参数理解
- MapReduce 本地执行hadoop程序 报错 java.lang.RuntimeException: java.lang.reflect.InvocationTargetException