Java 實用工具類Spring 的 StopWatch常用方法
前言
在日常開發(fā)中,我們經(jīng)常需要對代碼的執(zhí)行耗時進行監(jiān)控和分析。Spring 提供了一個輕量級的計時工具類:org.springframework.util.StopWatch,可以非常方便地實現(xiàn)多個任務的精確耗時統(tǒng)計,尤其適用于性能調優(yōu)與調試分析場景。
一、StopWatch 簡介
StopWatch 是 Spring Core 中的一個實用類,用于對代碼執(zhí)行過程中的多個階段進行計時和結果統(tǒng)計。它支持任務分段記錄、總耗時統(tǒng)計、任務名稱記錄等功能。
二、StopWatch 的常用方法
1. 構造方法
StopWatch stopWatch = new StopWatch("performance-monitor");參數(shù)可選,用于命名當前計時器。
2. 開始一個任務
stopWatch.start("task1");開始記錄一個任務,并命名該任務。
3. 停止當前任務
stopWatch.stop();
停止當前正在記錄的任務。
4. 判斷狀態(tài)
stopWatch.isRunning();
判斷當前是否還有任務在運行。
5. 獲取統(tǒng)計信息
stopWatch.prettyPrint(); // 打印所有任務及耗時信息(格式化) stopWatch.getTotalTimeMillis(); // 總耗時(毫秒) stopWatch.getTaskCount(); // 獲取任務數(shù)
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. 接口性能統(tǒng)計
可用于攔截器、過濾器等,對接口整體和各子流程耗時進行統(tǒng)計。
3. 單元測試性能分析
在測試代碼中評估某個方法調用的穩(wěn)定性和耗時情況。
4. 多線程任務分析(注意線程隔離)
在并發(fā)場景下,不建議多個線程共用一個 StopWatch 實例,應為每個線程獨立創(chuàng)建實例。
四、與 System.currentTimeMillis() 的對比優(yōu)勢
| 功能 | System.currentTimeMillis() | StopWatch |
|---|---|---|
| API 簡潔 | 非常原始 | 封裝好任務名、階段 |
| 支持多任務 | 手動維護多個變量 | 內部支持任務堆棧 |
| 輸出格式 | 自定義打印 | prettyPrint 統(tǒng)一美觀 |
| 可讀性 | 差 | 高,可讀性好 |
五、總結
StopWatch 是 Spring 框架中極其實用的開發(fā)輔助工具,它為性能分析和調試提供了輕量但強大的能力,使用簡單、無需復雜配置。
建議在接口調用鏈、框架擴展點、自定義組件等性能敏感區(qū)域,結合日志系統(tǒng)或 APM 工具使用 StopWatch,幫助我們在開發(fā)階段快速定位瓶頸、量化優(yōu)化效果。
貼士:不要在生產(chǎn)環(huán)境中濫用
StopWatch.prettyPrint(),可以定向輸出日志或結合自定義日志格式收集信息更為合適。
到此這篇關于Java 實用工具類:Spring 的 StopWatch的文章就介紹到這了,更多相關java StopWatch內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
java下載指定文件并返回給前端返回流文件的實現(xiàn)步驟
在Java中我們可以根據(jù)文件地址返回一個文件流,以便對文件進行讀取、寫入等操作,下面這篇文章主要給大家介紹了關于java下載指定文件并返回給前端返回流文件的實現(xiàn)步驟,需要的朋友可以參考下2024-03-03
springboot項目打包的可執(zhí)行jar運行報錯問題及解決
本文介紹了SpringBoot項目打包成可執(zhí)行jar文件后無法使用java-jar命令啟動的問題及解決方法,主要是需要在pom.xml文件中添加spring-boot-maven-plugin插件,以便生成正確的MANIFEST.MF文件2026-04-04
SpringBoot利用Junit動態(tài)代理實現(xiàn)Mock方法
說到Spring Boot 單元測試主要有兩個主流集成分別是Mockito,Junit,這個各有特點,在實際開發(fā)中,我想要的測試框架應該是這個框架集成者,本文給大家介紹了SpringBoot利用Junit動態(tài)代理實現(xiàn)Mock方法,需要的朋友可以參考下2024-04-04
SpringBoot內置tomcat參數(shù)調優(yōu)的實現(xiàn)
springboot內置了tomcat, 并給我們設置了默認參數(shù), 我們怎么樣修改springboot內置的tomcat參數(shù),本文就詳細的來介紹一下,感興趣的可以了解一下2023-09-09
SpringBoot中優(yōu)化Undertow性能的方法總結
Undertow是一個采用 Java 開發(fā)的靈活的高性能Web服務器,提供包括阻塞和基于NIO的非堵塞機制,本文將給大家介紹SpringBoot中優(yōu)化Undertow性能的方法,文中有相關的代碼示例供大家參考,需要的朋友可以參考下2024-08-08
Java動態(tài)添加Scheduled的實現(xiàn)方式
在Java中,動態(tài)添加??Scheduled???定時任務可以通過多種方式實現(xiàn),其中最常見的是使用Spring框架提供的??@Scheduled???注解結合??SchedulingConfigurer???接口,下面將詳細介紹如何在Spring環(huán)境中動態(tài)地添加、修改和取消定時任務,需要的朋友可以參考下2025-10-10

