欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot優(yōu)雅實現計算方法執(zhí)行時間

 更新時間:2025年04月15日 08:37:43   作者:寫bug寫bug  
這篇文章主要為大家詳細介紹了SpringBoot中優(yōu)雅實現計算方法執(zhí)行時間的相關方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

計算方法執(zhí)行時間是大多數后端應用程序中常見的非功能性需求。以下是一些計算執(zhí)行時間的傳統(tǒng)方法:

long startTime = (System.currentTimeMillis());
// 你的邏輯代碼
long executionTime = (System.currentTimeMillis() - startTime) / 1000;
LOGGER.info("計算所花費的時間為:{} 秒", executionTime);

StopWatch watch = new StopWatch();
watch.start();
// 你的邏輯代碼
watch.stop();
LOGGER.info("計算所花費的時間為:{} 秒", watch.getTotalTimeSeconds());

可以看到需要在每個需要計算執(zhí)行時間的方法里增加相同的計算代碼,這種統(tǒng)計代碼執(zhí)行時間的方式存在代碼冗余、違反 DRY 原則、侵入性強等問題。

接下來讓我們通過 AOP 來實現在方法頂部添加一個注解,就可以非常高效地計算所有方法的執(zhí)行時間的功能。

步驟一:啟用 Spring AOP

首先,通過在 POM.xml 中添加以下內容來啟用 Spring AOP:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

步驟二:創(chuàng)建自定義注解

現在讓我們在 Spring Boot 中創(chuàng)建一個名為 ExecutionTimeLogger 的自定義注解。可以看到,該注解在運行時起作用,并且適用于方法級別。

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ExecutionTimeLogger {
}

步驟三:創(chuàng)建切面類

創(chuàng)建一個作為切面的新類,包含計算方法執(zhí)行時間的邏輯。在 Spring AOP 中有多種使用切面的方式,這里使用 @Around 注解。創(chuàng)建 ExecutionTimeLoggerAspect 類并使用 @Aspect 注解,再創(chuàng)建 executionTimeLogger 方法并添加 @Around 注解,將注解名稱作為參數傳遞給 @Around,這樣該方法會在帶 ExecutionTimeLogger 注解的方法執(zhí)行前后被調用:

@Aspect
@Component
publicclass ExecutionTimeLoggerAspect {
    static final Logger logger = LoggerFactory.getLogger(ExecutionTimeLoggerAspect.class);

    @Around("@annotation(ExecutionTimeLogger)")
    public Object executionTimeLogger(ProceedingJoinPoint joinPoint) {
        try {
            long startTime = System.currentTimeMillis();
            Object proceed = joinPoint.proceed();
            long executionTime = (System.currentTimeMillis() - startTime);
            logger.info("{}方法在{}毫秒內執(zhí)行完畢", joinPoint.getSignature(), executionTime);
            return proceed;
        } catch (Throwable e) {
            logger.error("在計算{}方法執(zhí)行時間時出錯", joinPoint.getSignature(), e);
            return null;
        }
    }
}

步驟四:使用自定義注解

所有必需的配置都已完成?,F在我們唯一需要做的就是在想要計算 Java 代碼中方法執(zhí)行時間的地方使用該注解。假設要計算方法的執(zhí)行時間,如下面的代碼所示。只需在方法頂部添加注解即可。

public class CustomLoggingService {
    @ExecutionTimeLogger
    public void myMethod() {
        try {
            Thread.sleep(20000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

步驟五:查看輸出

當 myMethod 在你的代碼中執(zhí)行時的輸出:

c.n.t.a.ExecutionTimeLoggerAspect|void com.main.project.CustomLoggingService.myMethod()方法在20毫秒內執(zhí)行完畢

是不是很簡單?想象一下節(jié)省了多少時間和精力。只需寫一遍計算執(zhí)行時間的代碼,然后在需要計算執(zhí)行時間的地方繼續(xù)使用注解即可。

總結一下

1.創(chuàng)建自定義注解。

2.創(chuàng)建 @Aspect 類,包含計算執(zhí)行時間的方法。

3.用 @Around 聲明方法并指定為自定義注解執(zhí)行。

4.在要記錄執(zhí)行時間的方法上加注解。

到此這篇關于SpringBoot優(yōu)雅實現計算方法執(zhí)行時間的文章就介紹到這了,更多相關SpringBoot計算方法執(zhí)行時間內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java實現插入排序實例

    Java實現插入排序實例

    這篇文章主要介紹了Java實現插入排序,實例分析了Java的插入排序原理與實現技巧,非常具有實用價值,需要的朋友可以參考下
    2015-02-02
  • 5個JAVA入門必看的經典實例

    5個JAVA入門必看的經典實例

    這篇文章主要為大家詳細介紹了5個JAVA入門必看的經典實例,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Servlet文件的上傳與下載詳解

    Servlet文件的上傳與下載詳解

    很多朋友不清楚在Servlet中怎么上傳下載文件,談到這個問題,首先需要我們掌握開發(fā)servlet的步驟,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2022-06-06
  • Java switch 語句如何使用 String 參數

    Java switch 語句如何使用 String 參數

    這篇文章主要介紹了Java switch 語句如何使用 String 參數,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考下
    2019-06-06
  • 如何解決Maven無法拉取SNAPSHOT依賴問題

    如何解決Maven無法拉取SNAPSHOT依賴問題

    在使用Maven管理項目時,可能會遇到無法拉取SNAPSHOT版本依賴的問題,這通常是因為Maven默認不支持直接拉取SNAPSHOT版本,遇到這樣的問題,可以通過在項目的pom.xml文件中添加<repositories>標簽,并配置啟用SNAPSHOT的倉庫地址來解決
    2024-10-10
  • SpringBoot集成Access?DB實現數據導入和解析

    SpringBoot集成Access?DB實現數據導入和解析

    microsoft?office?access是由微軟發(fā)布的關聯式數據庫管理系統(tǒng),它結合了?microsoft?jet?database?engine?和?圖形用戶界面兩項特點,是一種關系數據庫工具,本文給大家介紹了SpringBoot集成Access?DB實現數據導入和解析,需要的朋友可以參考下
    2024-11-11
  • 詳解SpringBoot中Session超時原理說明

    詳解SpringBoot中Session超時原理說明

    本篇文章主要介紹了詳解SpringBoot中Session超時原理說明,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Spring配置文件使用占位符配置方式

    Spring配置文件使用占位符配置方式

    這篇文章主要介紹了Spring配置文件使用占位符配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • MyBatis中SqlSession生命周期的使用

    MyBatis中SqlSession生命周期的使用

    SqlSession是MyBatis的核心接口之一,本文主要介紹了MyBatis中SqlSession生命周期的使用,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-09-09
  • springboot 如何重定向redirect 并隱藏參數

    springboot 如何重定向redirect 并隱藏參數

    這篇文章主要介紹了springboot 如何重定向redirect 并隱藏參數的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評論