> 技术文档 > Java 实用工具类:Spring 的 StopWatch_spring stopwatch

Java 实用工具类:Spring 的 StopWatch_spring stopwatch


前言

        在日常开发中,我们经常需要对代码的执行耗时进行监控和分析。Spring 提供了一个轻量级的计时工具类:org.springframework.util.StopWatch,可以非常方便地实现多个任务的精确耗时统计,尤其适用于性能调优与调试分析场景。


一、StopWatch 简介

StopWatch 是 Spring Core 中的一个实用类,用于对代码执行过程中的多个阶段进行计时和结果统计。它支持任务分段记录、总耗时统计、任务名称记录等功能。


二、StopWatch 的常用方法

1. 构造方法
StopWatch stopWatch = new StopWatch(\"performance-monitor\");

参数可选,用于命名当前计时器。

2. 开始一个任务
stopWatch.start(\"task1\");

开始记录一个任务,并命名该任务。

3. 停止当前任务
stopWatch.stop();

停止当前正在记录的任务。

4. 判断状态
stopWatch.isRunning();

判断当前是否还有任务在运行。

5. 获取统计信息
stopWatch.prettyPrint(); // 打印所有任务及耗时信息(格式化)stopWatch.getTotalTimeMillis(); // 总耗时(毫秒)stopWatch.getTaskCount(); // 获取任务数
6. 获取具体任务信息
TaskInfo[] tasks = stopWatch.getTaskInfo();for (TaskInfo task : tasks) { System.out.println(task.getTaskName() + \": \" + task.getTimeMillis());}

三、常见使用场景

1. 性能瓶颈排查

在复杂方法中插入多个 stopWatch.start(\"stepX\") 记录各阶段耗时。

StopWatch sw = new StopWatch();sw.start(\"loadDb\");loadFromDatabase();sw.stop();sw.start(\"parseJson\");parseJsonData();sw.stop();System.out.println(sw.prettyPrint());
2. 接口性能统计

可用于拦截器、过滤器等,对接口整体和各子流程耗时进行统计。

3. 单元测试性能分析

在测试代码中评估某个方法调用的稳定性和耗时情况。

4. 多线程任务分析(注意线程隔离)

在并发场景下,不建议多个线程共用一个 StopWatch 实例,应为每个线程独立创建实例。


四、与 System.currentTimeMillis() 的对比优势

功能 System.currentTimeMillis() StopWatch API 简洁 非常原始 封装好任务名、阶段 支持多任务 手动维护多个变量 内部支持任务堆栈 输出格式 自定义打印 prettyPrint 统一美观 可读性 差 高,可读性好

五、总结

    StopWatch 是 Spring 框架中极其实用的开发辅助工具,它为性能分析和调试提供了轻量但强大的能力,使用简单、无需复杂配置。

        建议在接口调用链、框架扩展点、自定义组件等性能敏感区域,结合日志系统或 APM 工具使用 StopWatch,帮助我们在开发阶段快速定位瓶颈、量化优化效果。

贴士:不要在生产环境中滥用 StopWatch.prettyPrint(),可以定向输出日志或结合自定义日志格式收集信息更为合适。