您好,登錄后才能下訂單哦!
小編給大家分享一下spring boot aop如何記錄方法執(zhí)行時間,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
為了性能調(diào)優(yōu),需要先統(tǒng)計出來每個方法的執(zhí)行時間,直接在方法前后log輸出太麻煩,可以用AOP來加入時間統(tǒng)計
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
spring.aop.auto=true
spring.aop.auto屬性默認是開啟的,也就是說只要引入了AOP依賴后,默認已經(jīng)增加了@EnableAspectJAutoProxy。 切記千萬不要加入多余的信息,如@EnableAspectJAutoProxy!
@Component @Aspect public class LogAspect { private static final Log LOG = LogFactory.getLog(LogAspect.class); /** * 定義一個切入點. * 解釋下: * * ~ 第一個 * 代表任意修飾符及任意返回值. * ~ 第二個 * 定義在web包或者子包 * ~ 第三個 * 任意方法 * ~ .. 匹配任意數(shù)量的參數(shù). */ @Pointcut("execution(* com.wedo.stream.service..*.*(..))") public void logPointcut(){ } @org.aspectj.lang.annotation.Around("logPointcut()") public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable{ // LOG.debug("logPointcut " + joinPoint + "\t"); long start = System.currentTimeMillis(); try { Object result = joinPoint.proceed(); long end = System.currentTimeMillis(); LOG.error("+++++around " + joinPoint + "\tUse time : " + (end - start) + " ms!"); return result; } catch (Throwable e) { long end = System.currentTimeMillis(); LOG.error("+++++around " + joinPoint + "\tUse time : " + (end - start) + " ms with exception : " + e.getMessage()); throw e; } } }
aop后方法不能正確返回值
這個代理方法一定要返回值,否則,在代碼中就沒有返回值了。
//這樣是不對的 public void doAround(ProceedingJoinPoint joinPoint){}
Spring的文檔中這么寫的:Spring AOP部分使用JDK動態(tài)代理或者CGLIB來為目標(biāo)對象創(chuàng)建代理。如果被代理的目標(biāo)實現(xiàn)了至少一個接口,則會使用JDK動態(tài)代理。所有該目標(biāo)類型實現(xiàn)的接口都將被代理。若該目標(biāo)對象沒有實現(xiàn)任何接口,則創(chuàng)建一個CGLIB代理。
默認是JDK動態(tài)代理,更改為cglib
以上是“spring boot aop如何記錄方法執(zhí)行時間”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學(xué)習(xí)更多知識,歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。