Mybatis的拦截器Interceptor的用途

拦截器的用途

上文说过拦截的Interceptor的设计,有人留言说这个Interceptor能干什么用,今天就说说可以做什么并且怎么用?

我在项目中这样用过拦截器,一种就是大家很熟悉的分页插件(PageHelper)另一种就是报警慢查询。

今天就从慢查询报警的例子说下拦截器的用法。

1、首先定义一个类NoticeInterceptor实现Interceptor接口,并定义一个阈值threshold,并定义一个默认值2000毫秒。

定义Interceptor的实现类

2、添加注解Intercepts和Signature,配置类型的类型StatementHandler,和方法query。

添加注解Intercepts和Signature

3、实现intercept方法,大部分的逻辑都在这个方法实现,后面详解。

4、实现plugin方法,返回代理类,这个方法就是固定的写法。

实现plugin方法

5、实现setProperties方法,里面可以读取配置文件配置的属性,比如我们自定义的threshold。如果没有配置就用默认值。

实现setProperties方法

以下就说说intercept的实现,在真正方法调用的前后获取时间,时间差如果大于配置的阈值,我们可以发送警告邮件短信等,我们就简单打个日志,日志中打印出执行的sql和时间。

intercept的实现

拦截器实现完了,我们需要在配置文件中配置才能生效,并设置上阈值。

配置文件

执行结果如下:

执行sql【select * from bigtable】花费时间【2,047】

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20200226A0TLAU00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券