使用Spring AOP監(jiān)控指定方法執(zhí)行時間的代碼詳解
一、加入pom依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
二、切面類和注解
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)行時間:>").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)行時間 :> ").append("方法運(yùn)行時間為"+(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);
}
輸出臺結(jié)果
<===================================START===================================>
運(yùn)行時間:>2024-08-05 19:34:47
方法:> com.qbh.controller.TestController.test
運(yùn)行時間 :> 方法運(yùn)行時間為1.15秒
<====================================END====================================>
到此這篇關(guān)于使用Spring AOP監(jiān)控指定方法執(zhí)行時間的代碼詳解的文章就介紹到這了,更多相關(guān)Spring AOP監(jiān)控執(zhí)行時間內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringCloud應(yīng)用idea實現(xiàn)可相互調(diào)用的多模塊程序詳解
IDEA 全稱 IntelliJ IDEA,是java編程語言的集成開發(fā)環(huán)境。IntelliJ在業(yè)界被公認(rèn)為最好的Java開發(fā)工具,尤其在智能代碼助手、代碼自動提示、重構(gòu)、JavaEE支持、各類版本工具(git、svn等)、JUnit、CVS整合、代碼分析、 創(chuàng)新的GUI設(shè)計等方面的功能可以說是超常的2022-07-07
Netty分布式從recycler對象回收站獲取對象過程剖析
這篇文章主要為大家介紹了Netty分布式從recycler獲取對象的過程源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03
Java實現(xiàn)提取Word文檔表格數(shù)據(jù)
使用Java實現(xiàn)Word文檔表格數(shù)據(jù)的提取,可以確保數(shù)據(jù)處理的一致性和準(zhǔn)確性,同時大大減少所需的時間和成本,下面我們來看看具體實現(xiàn)方法吧2025-01-01
關(guān)于Cannot?resolve?com.microsoft.sqlserver:sqljdbc4:4.0報錯問題解
這篇文章主要給大家介紹了關(guān)于Cannot?resolve?com.microsoft.sqlserver:sqljdbc4:4.0報錯問題的解決辦法,這個是在pom文件中添加依賴出現(xiàn)報錯問題,需要的朋友可以參考下2024-02-02

