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

 更新时间:2024年08月06日 09:46:50   作者:齐展飞  
这篇文章主要介绍了使用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监控执行时间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 教你如何使用idea管理docker

    教你如何使用idea管理docker

    其实idea也提供了docker的管理功能,比如查看容器列表,启动容器,停止容器等,本文来看下如何管理本地的docker daemon和远程的dockers daemon,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • Java面向对象编程中final关键字的使用方法详解

    Java面向对象编程中final关键字的使用方法详解

    这篇文章主要介绍了Java面向对象编程中final关键字的使用方法详解,包括对内部匿名类无法访问外面的非 final 的变量问题的解读,需要的朋友可以参考下
    2016-06-06
  • Java安全之CC1利用链详解

    Java安全之CC1利用链详解

    这篇文章主要介绍了Java安全之CC1利用链的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-05-05
  • 如何使用jmeter录制浏览器Https请求过程图解

    如何使用jmeter录制浏览器Https请求过程图解

    这篇文章主要介绍了基于jmeter录制浏览器Https请求过程图解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-04-04
  • JAVA如何获取30天或某段范围日期

    JAVA如何获取30天或某段范围日期

    JAVA获取30天或某段范围日期的方法,在项目使用中比较频繁,通过示例代码介绍了Java获取当前时间的上一年、下一年、上个月、下个月、前一天,当天,本周,上周,本季度,上季度等(时间格式化),感兴趣的朋友一起看看吧
    2023-10-10
  • java中常用的字符串的比较方法(两种)

    java中常用的字符串的比较方法(两种)

    本文主要介绍了java中两种常用的字符串的比较方法。具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • Spring Security中的CORS详解

    Spring Security中的CORS详解

    CORS(Cross-Origin Resource Sharing)是一种允许不同源之间进行资源共享的W3C标准,它通过在服务器端设置特定的HTTP响应头,实现了跨域请求的功能,这种机制要求浏览器和服务器的支持,本文给大家介绍Spring Security中的CORS,感兴趣的朋友一起看看吧
    2024-10-10
  • Java读取resources目录下文件路径的九种代码示例教程

    Java读取resources目录下文件路径的九种代码示例教程

    在Java开发中经常需要读取项目中resources目录下的文件或获取资源路径,这篇文章主要给大家介绍了关于Java读取resources目录下文件路径的九种代码示例教程,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • idea已经提交到远程分支,但需要本地和远程都回退到某一版本问题

    idea已经提交到远程分支,但需要本地和远程都回退到某一版本问题

    这篇文章主要介绍了idea已经提交到远程分支,但需要本地和远程都回退到某一版本问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • Java中实现在一个方法中调用另一个方法

    Java中实现在一个方法中调用另一个方法

    下面小编就为大家分享一篇Java中实现在一个方法中调用另一个方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-02-02

最新评论