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

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

相关文章

  • Java抽奖抢购算法

    Java抽奖抢购算法

    这篇文章主要为大家详细介绍了Java抽奖抢购算法,ava实现的抽奖抢购算法,用数据库行锁实现,支持集群,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • hadoop上传文件功能实例代码

    hadoop上传文件功能实例代码

    这篇文章主要介绍了hadoop上传文件功能实例代码,需要的朋友可以参考下
    2017-09-09
  • Java仿Windows记事本源代码分享

    Java仿Windows记事本源代码分享

    这篇文章主要为大家详细介绍了Java仿Windows记事本源代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • Mybatis主配置文件的properties标签详解

    Mybatis主配置文件的properties标签详解

    这篇文章主要介绍了Mybatis主配置文件的properties标签,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-08-08
  • 在windows环境下安装jdk8、jdk9、jdk11、jdk12并自由切换

    在windows环境下安装jdk8、jdk9、jdk11、jdk12并自由切换

    这篇文章主要介绍了在windows环境下安装jdk8、jdk9、jdk11、jdk12并自由切换,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • Java中compareTo方法使用小结

    Java中compareTo方法使用小结

    compareTo是Java中Object类中的一个方法,它的作用是比较两个对象的大小关系,本文主要介绍了Java中compareTo方法使用小结,感兴趣的可以了解一下
    2024-01-01
  • HashMap确定key的存储位置的源码分析

    HashMap确定key的存储位置的源码分析

    HashMap 作为 Java 中最常用的数据结构之一,用于存储和管理键值对,HashMap 基于哈希函数实现,能通过将 key 映射到特定的位置来实现快速存储、查找和删除数据,接下来将从源码角度分析以通俗易懂的方式向大家讲解一下 HashMap 如何确定 key 的存储位置的
    2023-07-07
  • Java FTP协议实现文件下载功能

    Java FTP协议实现文件下载功能

    FTP(File Transfer Protocol)就是文件传输协议。通过FTP客户端从远程FTP服务器上拷贝文件到本地计算机称为下载,将本地计算机上的文件复制到远程FTP服务器上称为上传,上传和下载是FTP最常用的两个功能
    2022-11-11
  • Java 多线程之两步掌握

    Java 多线程之两步掌握

    Java 多线程编程 Java给多线程编程提供了内置的支持。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务
    2021-10-10
  • Java8 List集合如何移除满足条件的元素

    Java8 List集合如何移除满足条件的元素

    这篇文章主要介绍了Java8 List集合如何移除满足条件的元素,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-11-11

最新评论