使用Spring AOP監(jiān)控指定方法執(zhí)行時(shí)間的代碼詳解
一、加入pom依賴(lài)
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
二、切面類(lèi)和注解
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Documented
public @interface AroundRunTime {
String flag() default "";
}
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;
@Aspect
@Slf4j
@Component
public class AroundAspect {
@Around("@annotation(aroundRunTime)")
public Object aroundLog(ProceedingJoinPoint point, AroundRunTime aroundRunTime) {
StringBuilder sb = new StringBuilder();
long start = 0;
try {
MethodSignature signature = (MethodSignature) point.getSignature();
Method method = signature.getMethod();
sb.append("\n<===================================START===================================>\n");
sb.append("運(yùn)行時(shí)間:>").append(getStringByDate(new Date())).append("\n");
String methodName = method.getName();
sb.append("方法:> ").append(method.getDeclaringClass().getName() + "." + methodName).append("\n");
start = System.currentTimeMillis();
Object proceed = point.proceed();正常執(zhí)行方法
return proceed;
} catch (RuntimeException e) {
sb.append("RuntimeException:>").append(e.getMessage()).append("\n");
throw e;
} catch (Throwable throwable) {
sb.append("Throwable:>").append(throwable.getMessage()).append("\n");
throw new RuntimeException("系統(tǒng)異常!");
}finally {
long end = System.currentTimeMillis();
long time = end-start;
sb.append("運(yùn)行時(shí)間 :> ").append("方法運(yùn)行時(shí)間為"+(time/1000)+"." + (time%1000)+"秒").append("\n");
sb.append("<====================================END====================================>\n");
log.info(sb.toString());
}
}
public static String getStringByDate(Date date) {
try {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
三、執(zhí)行方法
@AroundRunTime
@GetMapping("test")
public void test() throws Exception {
Thread.sleep(1000);
}
輸出臺(tái)結(jié)果
<===================================START===================================>
運(yùn)行時(shí)間:>2024-08-05 19:34:47
方法:> com.qbh.controller.TestController.test
運(yùn)行時(shí)間 :> 方法運(yùn)行時(shí)間為1.15秒
<====================================END====================================>
到此這篇關(guān)于使用Spring AOP監(jiān)控指定方法執(zhí)行時(shí)間的代碼詳解的文章就介紹到這了,更多相關(guān)Spring AOP監(jiān)控執(zhí)行時(shí)間內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- springbootAOP定義切點(diǎn)獲取/修改請(qǐng)求參數(shù)方式
- Spring?AOP中的環(huán)繞通知詳解
- Spring Boot使用AOP在指定方法執(zhí)行完后執(zhí)行異步處理操作
- spring?boot如何通過(guò)自定義注解和AOP攔截指定的請(qǐng)求
- Spring AOP注解實(shí)戰(zhàn)指南
- SpringBoot使用AOP實(shí)現(xiàn)統(tǒng)計(jì)全局接口訪(fǎng)問(wèn)次數(shù)詳解
- 詳解Java SpringAOP切面類(lèi)
- Spring AOP快速入門(mén)及開(kāi)發(fā)步驟
相關(guān)文章
Java面向?qū)ο缶幊讨衒inal關(guān)鍵字的使用方法詳解
這篇文章主要介紹了Java面向?qū)ο缶幊讨衒inal關(guān)鍵字的使用方法詳解,包括對(duì)內(nèi)部匿名類(lèi)無(wú)法訪(fǎng)問(wèn)外面的非 final 的變量問(wèn)題的解讀,需要的朋友可以參考下2016-06-06
如何使用jmeter錄制瀏覽器Https請(qǐng)求過(guò)程圖解
這篇文章主要介紹了基于jmeter錄制瀏覽器Https請(qǐng)求過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-04-04
Java讀取resources目錄下文件路徑的九種代碼示例教程
在Java開(kāi)發(fā)中經(jīng)常需要讀取項(xiàng)目中resources目錄下的文件或獲取資源路徑,這篇文章主要給大家介紹了關(guān)于Java讀取resources目錄下文件路徑的九種代碼示例教程,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-07-07
idea已經(jīng)提交到遠(yuǎn)程分支,但需要本地和遠(yuǎn)程都回退到某一版本問(wèn)題
這篇文章主要介紹了idea已經(jīng)提交到遠(yuǎn)程分支,但需要本地和遠(yuǎn)程都回退到某一版本問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-11-11
Java中實(shí)現(xiàn)在一個(gè)方法中調(diào)用另一個(gè)方法
下面小編就為大家分享一篇Java中實(shí)現(xiàn)在一個(gè)方法中調(diào)用另一個(gè)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-02-02

