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