spring boot aop 记录方法执行时间
2017-01-12 09:35
731 查看
前言
为了性能调优,需要先统计出来每个方法的执行时间,直接在方法前后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代理。
默认是J
b467
DK动态代理,更改为cglib
相关文章推荐
- spring boot aop 记录方法执行时间代码示例
- 【HAVENT原创】使用 Spring Boot 的 AOP 全局记录执行时间日志
- 使用Spring的AOP实现接口方法执行时间记录
- springboot中通过aop的形式获取方法执行时间
- Spring AOP实践--记录类方法执行时间
- AspectJ spring aop 记录某些类中方法执行时间实例
- 利用Spring AOP记录方法的执行时间
- AspectJ spring aop 记录某些类中方法执行时间实例
- 使用Spring3.0的AOP结合log4j实现接口方法执行时间记录
- 一个用Spring AOP实现异常处理和记录程序执行时间的实例(一)
- 一个用Spring AOP实现异常处理和记录程序执行时间的实例(二)
- 从头认识Spring-3.2 简单的AOP日志实现-需要记录方法的运行时间
- spring aop实现打印方法执行时间
- spring aop 实现方法执行时间监控
- 一个用Spring AOP实现异常处理和记录程序执行时间的实例--邵京国
- 【HAVENT原创】使用 Spring Boot 的 AOP 拦截器终止方法执行
- Spring boot(20) Spring /Spring boot使用AOP、强制使用cglib(以记录方法耗时为例子)
- 用springAOP计算每一层方法执行的时间
- 记录每个方法的执行时间 AOP
- 5.11 一个用Spring AOP实现异常处理和记录程序执行时间的实例