欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2023-12-03 09:51:46
本文研究的主要是spring boot aop 记录方法执行时间的实现代码,具体如下。 为了性能调优,需要先统计出来每个方法的执行时间,直接在方法前后log输出太麻烦...

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

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

添加依赖

<dependency>  
 <groupid>org.springframework.boot</groupid>  
 <artifactid>spring-boot-starter-aop</artifactid>
</dependency>

在application.properties中加入配置

spring.aop.auto=true

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

实现具体代码

@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后方法不能正确返回值

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

//这样是不对的
 public void doaround(proceedingjoinpoint joinpoint){}

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

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

总结

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