Spring中StopWatch的使用
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的使用相关推荐
- spring中事务配置的3种方式-2
http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ch09s05.html http://zpchen.iteye.com/blog/ ...
- Spring中配置DataSource数据源的几种选择
Spring中配置DataSource数据源的几种选择 在Spring框架中有如下3种获得DataSource对象的方法: 从JNDI获得DataSource. 从第三方的连接池获得DataSourc ...
- 详解设计模式在Spring中的应用
设计模式作为工作学习中的枕边书,却时常处于勤说不用的尴尬境地,也不是我们时常忘记,只是一直没有记忆. 今天,螃蟹在IT学习者网站就设计模式的内在价值做一番探讨,并以spring为例进行讲解,只有领略了 ...
- Spring中利用applicationContext.xml文件实例化对象和调用方法
Spring中实例化对象和调用方法入门 1.jar包和xml的准备 已上传至百度云盘,链接: https://pan.baidu.com/s/1CY0xQq3GLK06iX7tVLnp3Q 提取码: ...
- 【spring 5】AOP:spring中对于AOP的的实现
在前两篇博客中,介绍了AOP实现的基础:静态代理和动态代理,这篇博客介绍spring中AOP的实现. 一.采用Annotation方式 首先引入jar包:aspectjrt.jar && ...
- Spring中WebApplicationContext
ApplicationContext是Spring的核心,Context我们通常解释为上下文环境,我想用"容器"来表述它更容易理解一 些,ApplicationContext则是& ...
- Spring中使用Schedule调度
在spring中两种办法使用调度,以下使用是在spring4.0中. 一.基于application配置文件,配置入下: 1 <bean id="jobDetail" cla ...
- Spring中SmartLifecycle和Lifecycle的作用和区别
欢迎关注方志朋的博客,回复"666"获面试宝典 本文基于SpringBoot 2.5.0-M2讲解Spring中Lifecycle和SmartLifecycle的作用和区别,以及如 ...
- 惊呆了,Spring中竟然有12种定义bean的方法
前言 在庞大的 Java 技术体系中,Spring 有着举足轻重的地位,它给每位开发者带来了极大的便利和惊喜. 我们都知道 Spring 是创建和管理bean的工厂,它提供了多种方式定义 bean,能 ...
最新文章
- Angular自学笔记(一)ngModule 元数据
- Manacher 例题讲解
- java 模拟qq空间登陆_java最新完美实现模拟登录QQ登录QQ空间获取说说
- ART世界探险(10) - 异常处理
- 基于Rainbond开发Python云原生应用
- application.properties 中文乱码问题解决
- 移动平均法又称滑动平均法、滑动平均模型法(Moving average,MA)
- n9100 分区 Linux,​史上最全的三星N9100官方固件
- 读优美博文了解低风险套利策略
- 育儿知识小分享—— 如何引导孩子学会分享
- slite 存储图片
- peewee操作mysql_Peewee 使用
- EUV光刻机内部揭秘!
- 打印当前python文件出错行
- html5写发送邮件源码,简单5步用 JavaScript 直接通过前端发送电子邮件
- 2:什么是反射与反射的应用及调用方法(by-朝夕)
- angularjs表单验证_AngularJS表单验证
- 将baml 转换为xaml_将XAML实施SAML
- 浅谈jquery源码解析
- 杭电OJ100题——2002-2005(C++版)
热门文章
- 增加用户粘性最有效的方法有哪些?
- Linux字体-Linux中文字体(mkfontscale mkfontdir fc-cache -fv命令)
- 【Unity3D开发小游戏】《跑酷小游戏》Unity开发教程
- web前端零基础入门(一)
- Ubuntu下Nginx安装与配置---kalrry
- opencv学习系列——图像对比度亮度调节
- 高级操作系统——XV6中断机制
- config.php 注入,FreePBX admin/config.php页面SQL注入漏洞
- 气象数据Grib格式解析的Python代码和Matlab代码
- JQ循环创建标签div