• SpringBoot之统计接口执行耗时


    实现功能:使用AOP统计方法执行耗时

    Maven依赖:

            <!--引入AOP依赖-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>

    自定义注解(加上该注解的方法系统自动统计耗时):

    import java.lang.annotation.ElementType;
    import java.lang.annotation.Retention;
    import java.lang.annotation.RetentionPolicy;
    import java.lang.annotation.Target;
    
    /**
     * 统计耗时
     */
    @Target(ElementType.METHOD)
    @Retention(RetentionPolicy.RUNTIME)
    public @interface TakeTime {
    
    }

    TakeTimeAspect(使用AOP技术统计方法执行前后消耗时间):

    import com.alibaba.fastjson.JSON;
    import org.aspectj.lang.JoinPoint;
    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
    @Component
    public class TakeTimeAspect {
    
        private static final Logger logger = LoggerFactory.getLogger(TakeTimeAspect.class);
    
    
        //统计请求的处理时间
        ThreadLocal<Long> startTime = new ThreadLocal<>();
    
        /**
         * 带有@TakeTime注解的方法
         */
        @Pointcut("@annotation(com.emi2c.mybatis.config.annotation.TakeTime)")
        public void log() {
    
        }
    
        @Before("log()")
        public void doBefore(JoinPoint joinPoint) throws Throwable {
            startTime.set(System.currentTimeMillis());
            //接收到请求,记录请求内容
            ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            HttpServletRequest request = attributes.getRequest();
            //记录请求的内容
            logger.info("请求URL:" + request.getRequestURL().toString());
            logger.info("请求METHOD:" + request.getMethod());
        }
    
        @AfterReturning(returning = "ret", pointcut = "log()")
        public void doAfterReturning(Object ret) {
            //处理完请求后,返回内容
            logger.info("方法返回值:" + JSON.toJSONString(ret));
            logger.info("方法执行时间:" + (System.currentTimeMillis() - startTime.get()));
        }
    
    
    }

    使用示例:

        @TakeTime
        @RequestMapping(value = "/test", method = RequestMethod.GET)
        public List<User> findAll() {
            List<User> userList = new ArrayList<>();
            for (int i = 0; i < 10; i++) {
                User user = new User();
                user.setUsername("user" + i);
                user.setPassword("password" + i);
                userList.add(user);
            }
            return userList;
        }
  • 相关阅读:
    怎样用Lodrunner测试WAP站点的性能(两种解决方案)
    LR测试登陆后进行的操作时 绕过登录
    单元测试 模块接口测试
    一个分布式服务器集群架构方案
    利用loadrunner代理方式,录制手机APP脚本
    安卓开发环境安卓
    安卓自动化测试(2)Robotium环境搭建与新手入门教程
    安卓自动化测试(1)安卓自动化测试原理概念
    HTML框架
    HTML5表单提交与PHP环境搭建
  • 原文地址:https://www.cnblogs.com/mxh-java/p/14319397.html
Copyright © 2020-2023  润新知