Java 实用工具类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(),可以定向输出日志或结合自定义日志格式收集信息更为合适。
到此这篇关于Java 实用工具类:Spring 的 StopWatch的文章就介绍到这了,更多相关java StopWatch内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
浅谈web服务器项目中request请求和response的相关响应处理
这篇文章主要介绍了浅谈web服务器项目中request请求和response的相关响应处理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2020-07-07
springboot利用aspose预览office文件的实现过程
这篇文章主要给大家介绍了关于springboot利用aspose预览office文件的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考价值,需要的朋友可以参考下2021-06-06
解决logback-classic 使用testCompile的打包问题
这篇文章主要介绍了解决logback-classic 使用testCompile的打包问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2021-07-07
一文详细讲解Java的父子继承、方法的重写与super关键字
Java中继承是通过extends关键字实现,帮助减少代码重复,提高复用性,子类继承父类的属性和方法,但私有成员除外,方法重写(override)使子类改造父类方法以适应新功能,这篇文章主要介绍了Java的父子继承、方法的重写与super关键字的相关资料,需要的朋友可以参考下2024-10-10


最新评论