一、导入相关依赖
org.springframework.boot spring-boot-starter-aop
二、创建自定义注解
/** * 统计耗时 */@Target(ElementType.METHOD)@Retention(RetentionPolicy.RUNTIME)public @interface TakeTime {}
三、创建切面
import org.aspectj.lang.annotation.AfterReturning;import org.aspectj.lang.annotation.Aspect;import org.aspectj.lang.annotation.Before;import org.aspectj.lang.annotation.Pointcut;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Component;import org.springframework.web.context.request.RequestContextHolder;import org.springframework.web.context.request.ServletRequestAttributes;import javax.servlet.http.HttpServletRequest;/*** 耗时统计*/@Aspect@Componentpublic class TakeTimeAspect { private static final Logger logger = LoggerFactory.getLogger(TakeTimeAspect.class); //统计请求的处理时间 ThreadLocal startTime = new ThreadLocal<>(); /*** 带有@TakeTime注解的方法*/ @Pointcut("@annotation(xxx.xxx.xxx.config.annotation.TakeTime)") public void log() { } @Before("log()") public void doBefore() throws Throwable { startTime.set(System.currentTimeMillis()); //接收到请求,记录请求内容 ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request = attributes.getRequest(); //记录请求的内容 logger.info("请求URL:" + request.getRequestURL().toString()); } @AfterReturning(returning = "ret", pointcut = "log()") public void doAfterReturning(Object ret) { //处理完请求后,返回内容 //logger.info("方法返回值:" + JSON.toJSONString(ret)); logger.info("方法执行时间:" + (System.currentTimeMillis() - startTime.get())); } }
三、在需要统计接口耗时的地方添加注解
@TakeTime
留言与评论(共有 0 条评论) “” |