【RuoYi-Vue-Plus】学习笔记 14 - 全局接口调用时间统计拦截器 PlusWebInvokeTimeInterceptor

前言

朋友们新年好!之前的一段时间一直在看尚硅谷新的MySQL的视频(老师讲得真好,推荐大家去看看),今天终于看完了,受益匪浅。
前几天【RuoYi-Vue-Plus】发布了4.0的 公测版本,大家有兴趣可以去码云上拉下来看看。今天在看框架目录的时候,看到了 PlusWebInvokeTimeInterceptor 这个类,虽然功能不算难,但是可以拿出来学习一下。
这个类主要解决的问题是接口调用时间的统计,以前的项目中一般使用的都是 ThreadLocal进行上下文参数传递,但是这里使用了一个全新的类(或者说是我以前没用过的类) TransmittableThreadLocal;统计时间使用的方式一般是接口调用前后获取系统当前时间 System.currentTimeMillis() 相减之差即为调用时间,这样的方式虽然可以达到目的,但是说实话代码看起来不太美观,框架中使用了一个专门用于时间统计的类 StopWatch,调用方式也很简单。

参考目录

代码分析

1、代码功能实现

主要步骤:

  • 1、继承拦截器接口 HandlerInterceptor
  • 2、重写相关方法 preHandlepostHandleafterCompletion
  • 3、注册拦截器到容器中

步骤1:
在这里插入图片描述
步骤2:
在这里插入图片描述
在这里插入图片描述
步骤3:
在这里插入图片描述

2、功能实现分析

以测试单表的接口 /demo/demo/list 为例进行请求。

2.1、PlusWebInvokeTimeInterceptor#preHandle

首先判断是否是生产环境下的配置:是,直接返回true,否,继续下面的逻辑。
生产环境中不进行计时考虑的应当是减少系统性能的消耗。
在这里插入图片描述
然后判断参数类型是否是JSON,并在控制台中打印请求参数。
在这里插入图片描述
请求参数不是JSON,从请求中获取 parameterMap
在这里插入图片描述
然后将参数格式化并输出到控制台。
在这里插入图片描述
控制台打印结果如下:
在这里插入图片描述
最后新建一个计时器 StopWatch 并保存到 TransmittableThreadLocal 中。
在这里插入图片描述
在这里插入图片描述
关于 TransmittableThreadLocal 的功能、需求场景、好处等建议查看一下 github 官方文档的描述,这里就不再赘述了。

2.2、PlusWebInvokeTimeInterceptor#afterCompletion

同上,首先判断是否是生产环境下的配置:是,直接返回,否,继续下面的逻辑。
然后从 TransmittableThreadLocal 中获取秒表并停止计时,然后打印到控制台中。
在这里插入图片描述
控制台打印结果如下(因为debug所以时间比较长):
在这里插入图片描述
最后调用 remove() 方法,防止内存泄漏。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MichelleChung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值