aop统计接口耗时

一、导入相关依赖

    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
接口   aop
发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章