java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Spring AOP监控执行时间

使用Spring AOP监控指定方法执行时间的代码详解

作者:齐展飞

这篇文章主要介绍了使用Spring AOP监控指定方法执行时间,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下

一、加入pom依赖

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

二、切面类和注解

import java.lang.annotation.*;

@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Documented
public @interface AroundRunTime {
    String flag() default "";
}

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.stereotype.Component;

import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.Date;

@Aspect
@Slf4j
@Component
public class AroundAspect {

    @Around("@annotation(aroundRunTime)")
    public Object aroundLog(ProceedingJoinPoint point, AroundRunTime aroundRunTime) {

        StringBuilder sb = new StringBuilder();
        long start = 0;
        try {
            MethodSignature signature = (MethodSignature) point.getSignature();
            Method method = signature.getMethod();
            sb.append("\n<===================================START===================================>\n");
            sb.append("运行时间:>").append(getStringByDate(new Date())).append("\n");
            String methodName = method.getName();
            sb.append("方法:> ").append(method.getDeclaringClass().getName() + "." + methodName).append("\n");

            start = System.currentTimeMillis();
            Object proceed = point.proceed();正常执行方法

            return proceed;
        } catch (RuntimeException e) {
            sb.append("RuntimeException:>").append(e.getMessage()).append("\n");
            throw e;
        } catch (Throwable throwable) {
            sb.append("Throwable:>").append(throwable.getMessage()).append("\n");
            throw new RuntimeException("系统异常!");
        }finally {
            long end = System.currentTimeMillis();
            long time = end-start;
            sb.append("运行时间 :> ").append("方法运行时间为"+(time/1000)+"." + (time%1000)+"秒").append("\n");
            sb.append("<====================================END====================================>\n");
            log.info(sb.toString());
        }
    }

    public static String getStringByDate(Date date) {
        try {
            return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}

三、执行方法

    @AroundRunTime
    @GetMapping("test")
    public void test() throws Exception {
        Thread.sleep(1000);
    }

输出台结果

<===================================START===================================>
运行时间:>2024-08-05 19:34:47
方法:> com.qbh.controller.TestController.test
运行时间 :> 方法运行时间为1.15秒
<====================================END====================================>

到此这篇关于使用Spring AOP监控指定方法执行时间的代码详解的文章就介绍到这了,更多相关Spring AOP监控执行时间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文