使用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监控执行时间内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringCloud应用idea实现可相互调用的多模块程序详解
IDEA 全称 IntelliJ IDEA,是java编程语言的集成开发环境。IntelliJ在业界被公认为最好的Java开发工具,尤其在智能代码助手、代码自动提示、重构、JavaEE支持、各类版本工具(git、svn等)、JUnit、CVS整合、代码分析、 创新的GUI设计等方面的功能可以说是超常的2022-07-07
Netty分布式从recycler对象回收站获取对象过程剖析
这篇文章主要为大家介绍了Netty分布式从recycler获取对象的过程源码剖析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-03-03
关于Cannot resolve com.microsoft.sqlserver:sqljdbc4:4.0报错问题解
这篇文章主要给大家介绍了关于Cannot resolve com.microsoft.sqlserver:sqljdbc4:4.0报错问题的解决办法,这个是在pom文件中添加依赖出现报错问题,需要的朋友可以参考下2024-02-02


最新评论