使用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监控执行时间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Hibernate中Session增删改查操作代码详解

    Hibernate中Session增删改查操作代码详解

    这篇文章主要介绍了Hibernate中Session增删改查操作代码详解,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • SpringCloud应用idea实现可相互调用的多模块程序详解

    SpringCloud应用idea实现可相互调用的多模块程序详解

    IDEA 全称 IntelliJ IDEA,是java编程语言的集成开发环境。IntelliJ在业界被公认为最好的Java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的
    2022-07-07
  • Struts2框架初学接触

    Struts2框架初学接触

    本文主要给大家从初学者的角度介绍了Struts2框架结构和基本页面代码等内容,一起来学习一下。
    2017-11-11
  • Netty分布式从recycler对象回收站获取对象过程剖析

    Netty分布式从recycler对象回收站获取对象过程剖析

    这篇文章主要为大家介绍了Netty分布式从recycler获取对象的过程源码剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-03-03
  • SpringBoot常用注解详细整理

    SpringBoot常用注解详细整理

    大家好,本篇文章主要讲的是SpringBoot常用注解详细整理,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2021-12-12
  • springboot项目配置多个kafka的示例代码

    springboot项目配置多个kafka的示例代码

    这篇文章主要介绍了springboot项目配置多个kafka,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-04-04
  • Java实现提取Word文档表格数据

    Java实现提取Word文档表格数据

    使用Java实现Word文档表格数据的提取,可以确保数据处理的一致性和准确性,同时大大减少所需的时间和成本,下面我们来看看具体实现方法吧
    2025-01-01
  • Java利用Socket类实现TCP通信程序

    Java利用Socket类实现TCP通信程序

    TCP通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端与服务端,下面我们就来看看Java如何利用Socket类实现TCP通信程序吧
    2024-02-02
  • 关于Cannot resolve com.microsoft.sqlserver:sqljdbc4:4.0报错问题解决办法

    关于Cannot resolve com.microsoft.sqlserver:sqljdbc4:4.0报错问题解

    这篇文章主要给大家介绍了关于Cannot resolve com.microsoft.sqlserver:sqljdbc4:4.0报错问题的解决办法,这个是在pom文件中添加依赖出现报错问题,需要的朋友可以参考下
    2024-02-02
  • Shiro的运行大致流程详解

    Shiro的运行大致流程详解

    这篇文章主要介绍了Shiro的运行大致流程详解,Shiro和SpringSecurity都是Java领域中常用的安全框架,它们都提供了身份认证和授权功能,可以帮助开发者快速构建安全的应用程序,需要的朋友可以参考下
    2023-07-07

最新评论