Java 實用工具類Spring 的 StopWatch常用方法
前言
在日常開發(fā)中,我們經(jīng)常需要對代碼的執(zhí)行耗時進行監(jiān)控和分析。Spring 提供了一個輕量級的計時工具類:org.springframework.util.StopWatch
,可以非常方便地實現(xiàn)多個任務(wù)的精確耗時統(tǒng)計,尤其適用于性能調(diào)優(yōu)與調(diào)試分析場景。
一、StopWatch 簡介
StopWatch
是 Spring Core 中的一個實用類,用于對代碼執(zhí)行過程中的多個階段進行計時和結(jié)果統(tǒng)計。它支持任務(wù)分段記錄、總耗時統(tǒng)計、任務(wù)名稱記錄等功能。
二、StopWatch 的常用方法
1. 構(gòu)造方法
StopWatch stopWatch = new StopWatch("performance-monitor");
參數(shù)可選,用于命名當前計時器。
2. 開始一個任務(wù)
stopWatch.start("task1");
開始記錄一個任務(wù),并命名該任務(wù)。
3. 停止當前任務(wù)
stopWatch.stop();
停止當前正在記錄的任務(wù)。
4. 判斷狀態(tài)
stopWatch.isRunning();
判斷當前是否還有任務(wù)在運行。
5. 獲取統(tǒng)計信息
stopWatch.prettyPrint(); // 打印所有任務(wù)及耗時信息(格式化) stopWatch.getTotalTimeMillis(); // 總耗時(毫秒) stopWatch.getTaskCount(); // 獲取任務(wù)數(shù)
6. 獲取具體任務(wù)信息
TaskInfo[] tasks = stopWatch.getTaskInfo(); for (TaskInfo task : tasks) { System.out.println(task.getTaskName() + ": " + task.getTimeMillis()); }
三、常見使用場景
1. 性能瓶頸排查
在復(fù)雜方法中插入多個 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. 單元測試性能分析
在測試代碼中評估某個方法調(diào)用的穩(wěn)定性和耗時情況。
4. 多線程任務(wù)分析(注意線程隔離)
在并發(fā)場景下,不建議多個線程共用一個 StopWatch
實例,應(yīng)為每個線程獨立創(chuàng)建實例。
四、與 System.currentTimeMillis() 的對比優(yōu)勢
功能 | System.currentTimeMillis() | StopWatch |
---|---|---|
API 簡潔 | 非常原始 | 封裝好任務(wù)名、階段 |
支持多任務(wù) | 手動維護多個變量 | 內(nèi)部支持任務(wù)堆棧 |
輸出格式 | 自定義打印 | prettyPrint 統(tǒng)一美觀 |
可讀性 | 差 | 高,可讀性好 |
五、總結(jié)
StopWatch
是 Spring 框架中極其實用的開發(fā)輔助工具,它為性能分析和調(diào)試提供了輕量但強大的能力,使用簡單、無需復(fù)雜配置。
建議在接口調(diào)用鏈、框架擴展點、自定義組件等性能敏感區(qū)域,結(jié)合日志系統(tǒng)或 APM 工具使用 StopWatch
,幫助我們在開發(fā)階段快速定位瓶頸、量化優(yōu)化效果。
貼士:不要在生產(chǎn)環(huán)境中濫用
StopWatch.prettyPrint()
,可以定向輸出日志或結(jié)合自定義日志格式收集信息更為合適。
到此這篇關(guān)于Java 實用工具類:Spring 的 StopWatch的文章就介紹到這了,更多相關(guān)java StopWatch內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
淺談web服務(wù)器項目中request請求和response的相關(guān)響應(yīng)處理
這篇文章主要介紹了淺談web服務(wù)器項目中request請求和response的相關(guān)響應(yīng)處理,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07springboot利用aspose預(yù)覽office文件的實現(xiàn)過程
這篇文章主要給大家介紹了關(guān)于springboot利用aspose預(yù)覽office文件的相關(guān)資料,文中通過示例代碼以及圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考價值,需要的朋友可以參考下2021-06-06解決logback-classic 使用testCompile的打包問題
這篇文章主要介紹了解決logback-classic 使用testCompile的打包問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-07-07關(guān)于Spring中Bean的創(chuàng)建進行更多方面的控制
今天小編就為大家分享一篇關(guān)于關(guān)于Spring中Bean的創(chuàng)建進行更多方面的控制,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-01-01SpringBoot配置多數(shù)據(jù)源的四種方式分享
在日常開發(fā)中我們都是以單個數(shù)據(jù)庫進行開發(fā),在小型項目中是完全能夠滿足需求的,但是,當我們牽扯到大型項目的時候,單個數(shù)據(jù)庫就難以承受用戶的CRUD操作,那么此時,我們就需要使用多個數(shù)據(jù)源進行讀寫分離的操作,本文就給大家介紹SpringBoot配置多數(shù)據(jù)源的方式2023-07-07一文詳細講解Java的父子繼承、方法的重寫與super關(guān)鍵字
Java中繼承是通過extends關(guān)鍵字實現(xiàn),幫助減少代碼重復(fù),提高復(fù)用性,子類繼承父類的屬性和方法,但私有成員除外,方法重寫(override)使子類改造父類方法以適應(yīng)新功能,這篇文章主要介紹了Java的父子繼承、方法的重寫與super關(guān)鍵字的相關(guān)資料,需要的朋友可以參考下2024-10-10