Spring-Boot中一个不起眼的好工具StopWatch

你好,我是风一样的树懒,一个工作十多年的后端开发,曾就职京东、阿里等多家互联网头部企业。

点击下方👇关注公众号,带你一起复习后端技术,看看面试考点,补充积累技术知识,每天都为面试准备积累


在 Spring Boot 中,StopWatch 是一个用于计时和性能监控的工具类,主要用于 测量一段代码的执行时间。它可以帮助开发者轻松地在程序中进行性能分析,尤其适合用于对比不同操作的时间消耗,帮助优化代码或进行调试。

StopWatch 属于Spring Framework 提供的工具类,在 org.springframework.util.StopWatch 包下。它的核心功能是记录开始和结束时间,并且可以测量多个任务的执行时间。


01
StopWatch 的基本使用


  • 创建 StopWatch 实例

  • 开始计时

  • 执行需要测量的任务

  • 停止计时

  • 获取执行时间

  • 输出结果

02
StopWatch 的常用方法


import org.springframework.util.StopWatch;public class StopWatchExample {    public static void main(String[] args) throws InterruptedException {        StopWatch stopWatch = new StopWatch();                // 启动计时        stopWatch.start("Task 1");                // 执行任务(模拟耗时操作)        Thread.sleep(1000);                // 结束计时        stopWatch.stop();                // 启动下一个任务        stopWatch.start("Task 2");                // 执行另一个任务(模拟耗时操作)        Thread.sleep(500);                // 结束计时        stopWatch.stop();                // 打印结果        System.out.println(stopWatch.prettyPrint());    }}

核心方法解释

  • start(String taskName)
    启动计时,taskName 用于标识这段任务。可以多次调用 start 方法来启动多个任务。

  • stop()
    停止当前的计时任务,记录下当前任务的执行时间。如果没有调用 start 方法,调用 stop 会抛出异常。

  • getTotalTimeMillis()
    获取所有任务的总执行时间,单位是毫秒。

  • getTaskCount()
    获取已经启动并执行的任务数。

  • getTaskInfo()
    获取所有任务的详细信息。返回一个 TaskInfo[] 数组,包含每个任务的名称、执行时间、任务状态等信息。

  • prettyPrint()
    格式化输出任务的执行信息。返回一个易于阅读的字符串,包含了每个任务的执行时间等详细信息。


03
prettyPrint() 方法输出格式


假设你有两个任务分别花费了 1 秒和 500 毫秒,prettyPrint() 输出大致会是:

StopWatch ''running time = 1.5 seconds-----------------------------------------task 'Task 1' running time = 1.000 secondstask 'Task 2' running time = 0.500 seconds-----------------------------------------Total running time = 1.500 seconds


04
常见使用场景


性能调优
StopWatch 常用于程序调试和性能优化,通过测量各个方法或代码块的执行时间,开发者可以定位哪些操作是瓶颈,进而进行优化。

对比不同实现的性能
比如比较同一个功能用不同方式(如并发与串行、不同算法等)的实现时间差异。

监控特定代码块的执行时间
在处理高并发或者复杂业务逻辑时,可以用它来监控各个步骤的耗时,从而精确判断性能瓶颈所在。

StopWatch vs. 其他性能测试工具

  • StopWatch 是一种轻量级的计时工具,适合用于单一进程的性能监控,并不依赖于外部工具。

  • 若你需要更复杂的性能分析,如内存消耗、线程分析等,可以考虑使用如 JProfiler、VisualVM、JMH 等工具。


05
在 Spring Boot 中的实际应用


Spring Boot 作为一个基于 Spring 的开发框架,通常会集成很多性能监控工具(例如 Spring Actuator)。StopWatch 作为一个工具类,可以结合 Spring Boot 应用进行性能分析:

  • 在控制器中记录某些业务操作的执行时间。

  • 在服务层中测量不同功能的执行时间,例如数据库操作、外部 API 调用等。

  • 集成 Spring Boot Actuator,与其他性能监控工具一起使用。

集成 Spring Boot Actuator 进行性能监控

虽然 StopWatch 可以帮助开发者单独分析性能,但是在大型应用中,Spring Boot Actuator 提供了更全面的监控能力,可以用来与 StopWatch 等工具配合,实现更高效的性能监控。


看完本篇,你以后写监控一个方法的调用时间有了新的思路了没有,还有不断的加各种log时间来写么?


今天的内容就分享到这儿,喜欢的朋友可以关注,点赞。有什么不足的地方欢迎留言指出,您的关注是我前进的动力!

END


扫码关注

一起积累后端知识
不积跬步,无以至千里
不积小流,无以成江海

喜欢此内容的人还喜欢

谈谈id那些事(五)——美团的 Leaf 的ID生成


一个阿里二面面试官必问的问题


谈谈id那些事(三)——阿里巴巴的 TDDL的ID生成


分享面试:mysql数据库索引失效的情况


面试常被忽略的问题——内存区域划分