当前位置: 首页 > news >正文

使用Spring AOP监控指定方法执行时间

文章目录

  • 一、加入pom依赖
  • 二、切面类和注解
  • 三、执行方法


一、加入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====================================>

http://www.lryc.cn/news/415669.html

相关文章:

  • 最新CSS3纵向菜单的实现
  • GooLeNet模型搭建
  • 使用ThreadLocal来存取单线程内的数据
  • elasticsearch教程
  • Arrays、Lambda表达式、Collection集合
  • 2024年前端趋势:全栈或许是不容错过的选择!
  • MySQL 实战 45 讲(01-05)
  • 仓颉编程语言入门 -- Array数组详解
  • C#初级——简单单例模式使用
  • 2024.07.29 校招 实习 内推 面经
  • 速盾:爬虫攻击和cc攻击的区别是什么?
  • Tomcat与Nginx的区别详解
  • 【大模型从入门到精通5】openAI API高级内容审核-1
  • JVM系列 | 对象的消亡3——垃圾收集器的对比与实现细节
  • C# Unity 面向对象补全计划 七大原则 之 开闭原则(OCP) 难度:☆ 总结:已经写好的就别动它了,多用继承
  • 微信防封指南请收好
  • 选择排序算法改进思路和算法实现
  • 【文件解析漏洞复现】
  • 【STL】 vector的底层实现
  • 责任链模式:解耦职责,优化请求处理
  • 【Scene Transformer】scene transformer论文阅读笔记
  • ESP32在ESP-IDF环境下禁用看门狗
  • 基于 uniapp html5plus API,怎么把图片保存到相册
  • 3.特征工程-特征抽取、特征预处理、特征降维
  • RISC-V (五)上下文切换和协作式多任务
  • Cornerstone加载本地Dicom文件第二弹 - Blob篇
  • C语言中整数类型及其类型转换
  • powerjob连接postgresql数据库(支持docker部署)
  • 浅谈位运算及其应用(c++)
  • Git版本管理中下列不适于Git的本地工作区域的是