当前位置: 代码网 > it编程>编程语言>Java > 使用Spring AOP监控指定方法执行时间的代码详解

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

2024年08月06日 Java 我要评论
一、加入pom依赖 <dependency> <groupid>org.springframework.boot</groupid&g

一、加入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监控执行时间内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com