服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Java教程 - spring boot aop 记录方法执行时间代码示例

spring boot aop 记录方法执行时间代码示例

2021-03-30 11:40joshua1830 Java教程

这篇文章主要介绍了spring boot aop 记录方法执行时间代码示例,分享了相关代码,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下

本文研究的主要是spring boot aop 记录方法执行时间的实现代码,具体如下。

为了性能调优,需要先统计出来每个方法的执行时间,直接在方法前后log输出太麻烦,可以用AOP来加入时间统计

添加依赖

?
1
2
3
4
<dependency
 <groupId>org.springframework.boot</groupId
 <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

在application.properties中加入配置

?
1
spring.aop.auto=true

spring.aop.auto属性默认是开启的,也就是说只要引入了AOP依赖后,默认已经增加了@EnableAspectJAutoProxy。 切记千万不要加入多余的信息,如@EnableAspectJAutoProxy!

实现具体代码

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
@Component
@Aspect
public class LogAspect {
    private static final Log LOG = LogFactory.getLog(LogAspect.class);
    /**
   * 定义一个切入点.
   * 解释下:
   *
   * ~ 第一个 * 代表任意修饰符及任意返回值.
   * ~ 第二个 * 定义在web包或者子包
   * ~ 第三个 * 任意方法
   * ~ .. 匹配任意数量的参数.
   */
    @Pointcut("execution(* com.wedo.stream.service..*.*(..))")
       public void logPointcut(){
    }
    @org.aspectj.lang.annotation.Around("logPointcut()")
       public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable{
        //       LOG.debug("logPointcut " + joinPoint + "\t");
        long start = System.currentTimeMillis();
        try {
            Object result = joinPoint.proceed();
            long end = System.currentTimeMillis();
            LOG.error("+++++around " + joinPoint + "\tUse time :
 " + (end - start) + " ms!");
            return result;
        }
        catch (Throwable e) {
            long end = System.currentTimeMillis();
            LOG.error("+++++around " + joinPoint + "\tUse time :
" + (end - start) + " ms with exception : " + e.getMessage());
            throw e;
        }
    }
}

注意问题

aop后方法不能正确返回值

这个代理方法一定要返回值,否则,在代码中就没有返回值了。

?
1
2
//这样是不对的
 public void doAround(ProceedingJoinPoint joinPoint){}

Spring的文档中这么写的:Spring AOP部分使用JDK动态代理或者CGLIB来为目标对象创建代理。如果被代理的目标实现了至少一个接口,则会使用JDK动态代理。所有该目标类型实现的接口都将被代理。若该目标对象没有实现任何接口,则创建一个CGLIB代理。

默认是JDK动态代理,更改为cglib

总结

以上就是本文关于spring boot aop 记录方法执行时间代码示例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

原文链接:http://blog.csdn.net/joshua1830/article/details/54375084

延伸 · 阅读

精彩推荐