拦截器的用途
上文说过拦截的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】
领取专属 10元无门槛券
私享最新 技术干货