spring boot aop 記錄方法執(zhí)行時間代碼示例
本文研究的主要是spring boot aop 記錄方法執(zhí)行時間的實現(xiàn)代碼,具體如下。
為了性能調(diào)優(yōu),需要先統(tǒng)計出來每個方法的執(zhí)行時間,直接在方法前后log輸出太麻煩,可以用AOP來加入時間統(tǒng)計
添加依賴
<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!
實現(xiàn)具體代碼
@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代理。
默認(rèn)是JDK動態(tài)代理,更改為cglib
總結(jié)
以上就是本文關(guān)于spring boot aop 記錄方法執(zhí)行時間代碼示例的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
關(guān)于SpringBoot中事務(wù)失效的幾種情況
這篇文章主要介紹了關(guān)于SpringBoot中事務(wù)失效的幾種情況,Spring AOP默認(rèn)使用動態(tài)代理,會給被代理的類生成一個代理類,事務(wù)相關(guān)的操作都通過代理來完成,使用內(nèi)部方法調(diào)用時,使用的是實例調(diào)用,沒有通過代理類調(diào)用方法,因此事務(wù)不會檢測到失敗,需要的朋友可以參考下2023-08-08
Spring @Bean vs @Service注解區(qū)別
本篇文章主要介紹了Spring @Bean vs @Service注解區(qū)別,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-12-12

