使用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("運行時間:>").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("運行時間 :> ").append("方法運行時間為"+(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===================================>
運行時間:>2024-08-05 19:34:47
方法:> com.qbh.controller.TestController.test
運行時間 :> 方法運行時間為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-07Netty分布式從recycler對象回收站獲取對象過程剖析
這篇文章主要為大家介紹了Netty分布式從recycler獲取對象的過程源碼剖析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-03-03Java實現(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