StopWatch简单的秒表,允许多个任务的计时,暴露每个命名任务的总运行时间和运行时间。隐藏使用System.currentTimeMillis(),提高应用程序代码的可读性并减少计算错误的可能性。

以下演示使用StopWatch记录请求摘要日志信息:

@Slf4j
public class PerformanceInteceptor implements HandlerInterceptor {private ThreadLocal<StopWatch> stopWatchThreadLocal = new ThreadLocal<>();@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {StopWatch sw = new StopWatch();stopWatchThreadLocal.set(sw);sw.start();return true;}@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {stopWatchThreadLocal.get().stop();stopWatchThreadLocal.get().start();}@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {StopWatch sw = stopWatchThreadLocal.get();sw.stop();String method = handler.getClass().getSimpleName();if (handler instanceof HandlerMethod) {String beanType = ((HandlerMethod) handler).getBeanType().getName();String methodName = ((HandlerMethod) handler).getMethod().getName();method = beanType + "." + methodName;}// sw.getTotalTimeMillis(), 总执行时间//sw.getTotalTimeMillis() - sw.getLastTaskTimeMillis(), 执行方法体所需要的时间log.info("{};{};{};{};{}ms;{}ms;{}ms", request.getRequestURI(), method,response.getStatus(), ex == null ? "-" : ex.getClass().getSimpleName(),sw.getTotalTimeMillis(), sw.getTotalTimeMillis() - sw.getLastTaskTimeMillis(),sw.getLastTaskTimeMillis());stopWatchThreadLocal.remove();}
}

                    微信公众号

JAVA程序猿成长之路

分享资源,记录程序猿成长点滴。专注于Java,Spring,SpringBoot,SpringCloud,分布式,微服务。

Spring中StopWatch的使用相关推荐

  1. spring中事务配置的3种方式-2

    http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ch09s05.html http://zpchen.iteye.com/blog/ ...

  2. Spring中配置DataSource数据源的几种选择

    Spring中配置DataSource数据源的几种选择 在Spring框架中有如下3种获得DataSource对象的方法: 从JNDI获得DataSource. 从第三方的连接池获得DataSourc ...

  3. 详解设计模式在Spring中的应用

    设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆. 今天,螃蟹在IT学习者网站就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了 ...

  4. Spring中利用applicationContext.xml文件实例化对象和调用方法

    Spring中实例化对象和调用方法入门 1.jar包和xml的准备 已上传至百度云盘,链接: https://pan.baidu.com/s/1CY0xQq3GLK06iX7tVLnp3Q 提取码: ...

  5. 【spring 5】AOP:spring中对于AOP的的实现

    在前两篇博客中,介绍了AOP实现的基础:静态代理和动态代理,这篇博客介绍spring中AOP的实现. 一.采用Annotation方式 首先引入jar包:aspectjrt.jar && ...

  6. Spring中WebApplicationContext

    ApplicationContext是Spring的核心,Context我们通常解释为上下文环境,我想用"容器"来表述它更容易理解一 些,ApplicationContext则是& ...

  7. Spring中使用Schedule调度

    在spring中两种办法使用调度,以下使用是在spring4.0中. 一.基于application配置文件,配置入下: 1 <bean id="jobDetail" cla ...

  8. Spring中SmartLifecycle和Lifecycle的作用和区别

    欢迎关注方志朋的博客,回复"666"获面试宝典 本文基于SpringBoot 2.5.0-M2讲解Spring中Lifecycle和SmartLifecycle的作用和区别,以及如 ...

  9. 惊呆了,Spring中竟然有12种定义bean的方法

    前言 在庞大的 Java 技术体系中,Spring 有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜. 我们都知道 Spring 是创建和管理bean的工厂,它提供了多种方式定义 bean,能 ...

最新文章

  1. Angular自学笔记(一)ngModule 元数据
  2. Manacher 例题讲解
  3. java 模拟qq空间登陆_java最新完美实现模拟登录QQ登录QQ空间获取说说
  4. ART世界探险(10) - 异常处理
  5. 基于Rainbond开发Python云原生应用
  6. application.properties 中文乱码问题解决
  7. 移动平均法又称滑动平均法、滑动平均模型法(Moving average,MA)
  8. n9100 分区 Linux,​史上最全的三星N9100官方固件
  9. 读优美博文了解低风险套利策略
  10. 育儿知识小分享—— 如何引导孩子学会分享
  11. slite 存储图片
  12. peewee操作mysql_Peewee 使用
  13. EUV光刻机内部揭秘!
  14. 打印当前python文件出错行
  15. html5写发送邮件源码,简单5步用 JavaScript 直接通过前端发送电子邮件
  16. 2:什么是反射与反射的应用及调用方法(by-朝夕)
  17. angularjs表单验证_AngularJS表单验证
  18. 将baml 转换为xaml_将XAML实施SAML
  19. 浅谈jquery源码解析
  20. 杭电OJ100题——2002-2005(C++版)

热门文章

  1. 增加用户粘性最有效的方法有哪些?
  2. Linux字体-Linux中文字体(mkfontscale mkfontdir fc-cache -fv命令)
  3. 【Unity3D开发小游戏】《跑酷小游戏》Unity开发教程
  4. web前端零基础入门(一)
  5. Ubuntu下Nginx安装与配置---kalrry
  6. opencv学习系列——图像对比度亮度调节
  7. 高级操作系统——XV6中断机制
  8. config.php 注入,FreePBX admin/config.php页面SQL注入漏洞
  9. 气象数据Grib格式解析的Python代码和Matlab代码
  10. JQ循环创建标签div