Spring StopWatch使用实例详解

 更新时间:2020年01月15日 10:49:10   作者:盲目的拾荒者  
这篇文章主要介绍了Spring StopWatch使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

这篇文章主要介绍了Spring StopWatch使用实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

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

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

@Slf4j
public class PerformanceInteceptor implements HandlerInterceptor {
  private ThreadLocal<StopWatch> stopWatchThreadLocal = new ThreadLocal<>();

  @Override
  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    StopWatch sw = new StopWatch();
    stopWatchThreadLocal.set(sw);
    sw.start();
    return true;
  }

  @Override
  public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    stopWatchThreadLocal.get().stop();
    stopWatchThreadLocal.get().start();
  }

  @Override
  public 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();
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • IntelliJ IDEA 2020最新激活码(亲测有效,可激活至 2089 年)

    IntelliJ IDEA 2020最新激活码(亲测有效,可激活至 2089 年

    这篇文章主要介绍了IntelliJ IDEA 2021最新激活码(亲测有效,可激活至 2089 年),非常不错,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-04-04
  • Java BIO实现聊天程序

    Java BIO实现聊天程序

    这篇文章主要为大家详细介绍了Java BIO实现聊天程序,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • java数据结构和算法学习之汉诺塔示例

    java数据结构和算法学习之汉诺塔示例

    这篇文章主要介绍了java数据结构和算法中的汉诺塔示例,需要的朋友可以参考下
    2014-02-02
  • java实现折半排序算法

    java实现折半排序算法

    折半插入排序法,又称二分插入排序法,是直接插入排序法的改良版,也需要执行i-1趟插入,不同之处在于,第i趟插入,先找出第i+1个元素应该插入的的位置,假定前i个数据是已经处于有序状态。
    2015-04-04
  • 最新JVM垃圾回收算法详解

    最新JVM垃圾回收算法详解

    ​ 垃圾收集器对堆进行回收前,首先要确定堆中的对象哪些还"存活",哪些已经"死去"。有两种算法,分别是引用计数算法(Recference Counting)和可达性分析算法(Reachability Analysis),这篇文章主要介绍了JVM垃圾回收算法,需要的朋友可以参考下
    2022-05-05
  • Java在Excel中创建多级分组、折叠或展开分组的实现

    Java在Excel中创建多级分组、折叠或展开分组的实现

    这篇文章主要介绍了Java在Excel中创建多级分组、折叠或展开分组的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • java对象拷贝常见面试题及应答汇总

    java对象拷贝常见面试题及应答汇总

    在本篇文章里小编给大家整理的是关于java对象拷贝常见面试题的相关内容,需要的朋友们可以学习下。
    2020-02-02
  • java实现把两个有序数组合并到一个数组的实例

    java实现把两个有序数组合并到一个数组的实例

    今天小编就为大家分享一篇java实现把两个有序数组合并到一个数组的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • Springboot2.0配置JPA多数据源连接两个mysql数据库方式

    Springboot2.0配置JPA多数据源连接两个mysql数据库方式

    这篇文章主要介绍了Springboot2.0配置JPA多数据源连接两个mysql数据库方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 使用log4j2自定义配置文件位置和文件名(附log4j2.xml配置实例)

    使用log4j2自定义配置文件位置和文件名(附log4j2.xml配置实例)

    这篇文章主要介绍了使用log4j2自定义配置文件位置和文件名(附log4j2.xml配置实例),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12

最新评论