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() 的对比优势
prettyPrint
统一美观五、总结
StopWatch
是 Spring 框架中极其实用的开发辅助工具,它为性能分析和调试提供了轻量但强大的能力,使用简单、无需复杂配置。
建议在接口调用链、框架扩展点、自定义组件等性能敏感区域,结合日志系统或 APM 工具使用 StopWatch
,帮助我们在开发阶段快速定位瓶颈、量化优化效果。
贴士:不要在生产环境中滥用
StopWatch.prettyPrint()
,可以定向输出日志或结合自定义日志格式收集信息更为合适。