spring boot aop 記錄方法執(zhí)行時間代碼示例
本文研究的主要是spring boot aop 記錄方法執(zhí)行時間的實(shí)現(xiàn)代碼,具體如下。
為了性能調(diào)優(yōu),需要先統(tǒng)計(jì)出來每個方法的執(zhí)行時間,直接在方法前后log輸出太麻煩,可以用AOP來加入時間統(tǒng)計(jì)
添加依賴
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
在application.properties中加入配置
spring.aop.auto=true
spring.aop.auto屬性默認(rèn)是開啟的,也就是說只要引入了AOP依賴后,默認(rèn)已經(jīng)增加了@EnableAspectJAutoProxy。 切記千萬不要加入多余的信息,如@EnableAspectJAutoProxy!
實(shí)現(xiàn)具體代碼
@Component @Aspect public class LogAspect { private static final Log LOG = LogFactory.getLog(LogAspect.class); /** * 定義一個切入點(diǎn). * 解釋下: * * ~ 第一個 * 代表任意修飾符及任意返回值. * ~ 第二個 * 定義在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)實(shí)現(xiàn)了至少一個接口,則會使用JDK動態(tài)代理。所有該目標(biāo)類型實(shí)現(xiàn)的接口都將被代理。若該目標(biāo)對象沒有實(shí)現(xiàn)任何接口,則創(chuàng)建一個CGLIB代理。
默認(rèn)是JDK動態(tài)代理,更改為cglib
總結(jié)
以上就是本文關(guān)于spring boot aop 記錄方法執(zhí)行時間代碼示例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
如何用JAVA判斷當(dāng)前時間是否為節(jié)假日、周末、工作日及調(diào)休日(不報錯:IOException!)
最近公司有個業(yè)務(wù)需要判斷工作日,但是每年的節(jié)假日不一樣,下面這篇文章主要給大家介紹了關(guān)于如何用JAVA判斷當(dāng)前時間是否為節(jié)假日、周末、工作日及調(diào)休日的相關(guān)資料,且不報錯:IOException!,需要的朋友可以參考下2023-12-12SpringBoot日程管理Quartz與定時任務(wù)Task實(shí)現(xiàn)詳解
定時任務(wù)是企業(yè)級開發(fā)中必不可少的組成部分,諸如長周期業(yè)務(wù)數(shù)據(jù)的計(jì)算,例如年度報表,諸如系統(tǒng)臟數(shù)據(jù)的處理,再比如系統(tǒng)性能監(jiān)控報告,還有搶購類活動的商品上架,這些都離不開定時任務(wù)。本節(jié)將介紹兩種不同的定時任務(wù)技術(shù)2022-09-09springBoot接入阿里云oss的實(shí)現(xiàn)步驟
這篇文章主要介紹了springBoot接入阿里云oss的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01Java this super代碼實(shí)例及使用方法總結(jié)
這篇文章主要介紹了Java this super代碼實(shí)例及使用方法總結(jié),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-03-03