Spring Boot源码实现StopWatch优雅统计耗时

目录
  • 引言
  • StopWatch使用
  • 使用Beyond compare比较

引言

昨天,一位球友问我能不能给他解释一下 @SpringBootApplication 注解是什么意思,还有 Spring Boot 的运行原理,于是我就带着他扒拉了一下这个注解的源码,还有 SpringApplication 类的 run() 方法的源码,一下子他就明白了。

你别说,看源码的过程还真的是挺有趣,这不,我就发现了一个有意思的点。

public ConfigurableApplicationContext run(String... args) {
	StopWatch stopWatch = new StopWatch();
	stopWatch.start();
	......
	stopWatch.stop();
}

Spring Boot 是用 StopWatch 来统计耗时的,而通常情况下,我们会用 System.currentTimeMillis() 来统计耗时,对吧?编程喵开源项目里就有这样一段代码,在处理统一日志处理切面的时候。

@Around("webLog()")
public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {
    long startTime = System.currentTimeMillis();
    long endTime = System.currentTimeMillis();
    webLog.setSpendTime((int) (endTime - startTime));
}

对比之下,我们就能发现,JDK 提供的 System.currentTimeMillis() 没有 Spring 提供的 StopWatch 简洁、清晰。

StopWatch使用

尤其是在多任务的情况下,StopWatch 简直好用到爆

(0)

相关推荐

  • Java计时器StopWatch实现方法代码实例

    下面提供三种计时器的写法供大家参考,大家可以自行选择自己钟爱的使用. 写法一(Spring 包提供的计时器): import java.text.NumberFormat; import java.util.LinkedList; import java.util.List; /** * Simple stop watch, allowing for timing of a number of tasks, * exposing total running time and running ti

  • Java计时新姿势StopWatch的使用方法详解

    目录 一.背景 二.spring 用法 2.1 初遇 2.2 源码 2.3 注意事项 三.apache 用法 四.java 中使用StopWatch来计算时间差 五.最后 一.背景 有时我们在做开发的时候需要记录每个任务执行时间,或者记录一段代码执行时间,最简单的方法就是打印当前时间与执行完时间的差值,一般我们检测某段代码执行的时间,都是以如下方式来进行的: public static void main(String[] args) { Long startTime = System.curr

  • 如何使用C# Stopwatch 测量微秒级精确度

    跟同事讨论到- 用C# Stopwatch 取得效能数值,Stopwatch.ElapsedMilliseconds 只到毫秒(ms),如果需要更高的时间精确度(微秒μs,甚至奈秒ns),该怎么做? 原以为要费番功夫,在Stackoverlow查到讨论,答案意外地简单. 准备测试程式如下,比较MD5 及SHA1 计算1MB byte[] 杂凑值所秏费时间: static byte[] data = new byte[1024 * 1024]; static void Main(string[]

  • Java计时器工具StopWatch的具体使用

    目录 前言 Spring StopWatch 实践例子 源码分析 lang3 StopWatch 总结 前言 平常,我们想要统计某一段代码块,或某一个方法的执行时间,最简单的是采用如下的方式. package com.chenpi; ​ /** * @author 陈皮 * @version 1.0 * @description * @date 2022/4/2 */ public class ChenPi { ​ public static void main(String[] args) t

  • C# 中使用Stopwatch计时器实现暂停计时继续计时功能

    最近程序上用到了计时功能,对某个模块进行计时,暂停的时候模块也需要暂停,启动的时候计时继续 用到了Stopwatch Stopwatch的命名空间是using System.Diagnostics; using System; using System.Collections.Generic; using System.Diagnostics; using System.Linq; using System.Text; using System.Threading; using System.T

  • Spring Boot源码实现StopWatch优雅统计耗时

    目录 引言 StopWatch使用 使用Beyond compare比较 引言 昨天,一位球友问我能不能给他解释一下 @SpringBootApplication 注解是什么意思,还有 Spring Boot 的运行原理,于是我就带着他扒拉了一下这个注解的源码,还有 SpringApplication 类的 run() 方法的源码,一下子他就明白了. 你别说,看源码的过程还真的是挺有趣,这不,我就发现了一个有意思的点. public ConfigurableApplicationContext

  • Spring Security源码解析之权限访问控制是如何做到的

    〇.前文回顾 在实战篇<话说Spring Security权限管理(源码详解)>我们学习了Spring Security强大的访问控制能力,只需要进行寥寥几行的配置就能做到权限的控制,本篇来看看它到底是如何做到的. 一.再聊过滤器链 源码篇中反复提到,请求进来需要经过的是一堆过滤器形成的过滤器链,走完过滤器链未抛出异常则可以继续访问后台接口资源,而最后一个过滤器就是来判断请求是否有权限继续访问后台资源,如果没有则会将拒绝访问的异常往上向异常过滤器抛,异常过滤器会对异常进行翻译,然后响应给客户端

  • Spring IOC源码剖析_如何整体认知Spring体系结构

    目录 如何整体认知Spring体系结构 一.来自官网的Spring 二.Spring的优缺点 三.一张图理解Spring Framework 4.x 四.详解"七层"宝塔 1. 核心容器(Core Container) 2. 数据访问/集成(Data Access/Integration)层 3. Web层 4. AOP(Aspect Oriented Programming)模块 5. 植入(Instrumentation)模块 6. 消息传输(Messaging) 7. 测试(Te

  • Spring IOC源码之bean的注册过程讲解

    目录 BeanDefition加载注册过程 进入obtainFreshBeanFactory方法 ​进入AbstractRefreshableApplicationContext类中的refreshBeanFactory方法 进入AbstractXmlApplicationContext类的loadBeanDefinitions方法 进入doLoadBeanDefinitions方法 Spring IoC--Bean的创建和初始化 Spring介绍 IoC介绍 IoC是什么 IoC能做什么 源码

  • Spring cache源码深度解析

    Spring cache是一个缓存API层,封装了对多种缓存的通用操作,可以借助注解方便地为程序添加缓存功能.常见的注解有@Cacheable.@CachePut.@CacheEvict,有没有想过背后的原理是什么?楼主带着疑问,阅读完Spring cache的源码后,做一个简要总结.先说结论,核心逻辑在CacheAspectSupport类,封装了所有的缓存操作的主体逻辑,下面详细介绍. 题外话:如何阅读开源代码? 有2种方法,可以结合起来使用: 静态代码阅读:查找关键类.方法的usage之处

  • Spring Aop 源码增强获取分享

    目录 1 前言 2 spring 增强器 3 总结 1 前言 在前文中,已经讲述了 AOP的后置处理器使用和方法,在本文中继续分享增强信息相关的源码,这里才是 AOP 的核心代码. 2 spring 增强器 之前已经讲述了 spring AbstractApplicationContext.refresh 方法,在以下方法中都会处理会处理 BeanPostProcessor 接口. invokeBeanFactoryPostProcessors registerBeanPostProcessor

  • Spring cache源码深度解析

    目录 前言 题外话:如何阅读开源代码? 核心类图 源码分析(带注释解释) 1.解析注解 2.逻辑执行 总结 前言 Spring cache是一个缓存API层,封装了对多种缓存的通用操作,可以借助注解方便地为程序添加缓存功能. 常见的注解有@Cacheable.@CachePut.@CacheEvict,有没有想过背后的原理是什么?楼主带着疑问,阅读完Spring cache的源码后,做一个简要总结. 先说结论,核心逻辑在CacheAspectSupport类,封装了所有的缓存操作的主体逻辑,下面

  • Spring AOP源码深入分析

    目录 1. 前言 2. 术语 3. 示例 4. @EnableAspectJAutoProxy 5. AbstractAutoProxyCreator 6. 构建Advisor 7. 创建代理对象 8. DynamicAdvisedInterceptor 9. CglibMethodInvocation 10. Advice子类 1. 前言 Spring除了IOC和DI,还有另一个杀手锏功能——Spring AOP.AOP是一种面向切面的编程思想,它的关注点是横向的,不同于OOP的纵向.面向对象

  • Spring Aware源码设计示例解析

    目录 1. Aware介绍 2. Aware类别 2.1 BeanClassLoaderAware 2.2 BeanFactoryAware 2.3 BeanNameAware 2.4 ApplicationContextAware 3. Aware的使用 4. Aware的作用 5. Aware的调用 1. Aware介绍 前一篇讲到了BeanPostProcessor的相关知识,我们知道BeanPostProcessor是对整个容器中的Bean做前置和后置增强处理.这样的实现方式限制了开发者

  • Spring实现源码下载编译及导入IDEA过程图解

    一.环境准备 idea版本:IntelliJ IDEA 2019.3.4 gradle版本:gradle-4.10.3 jdk版本:jdk-8u251-windows-x64.exe(1.8.0_251) Spring源码版本:spring-framework-5.1.x 说明:该套spring源码编译导入的环境是本人经过三天的不断调试更改后能够成功编译导入的一套环境,在首次编译成功后又进行了多次的重试均可一次编译成功.如环境与上述不一致,下面的步骤不保证spring源码能编译并导入IDEA百分

随机推荐