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

