-
创建一个自定义注解
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) public @interface MeasureExecutionTime { }
-
创建一个切面类,用于统计方法执行时间
import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Pointcut; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Aspect @Component public class MethodExecutionTimeAspect { private static final Logger logger = LoggerFactory.getLogger(MethodExecutionTimeAspect.class); @Pointcut("@annotation(com.example.demo.annotation.MeasureExecutionTime)") public void measureExecutionTimeMethods() { } @Around("measureExecutionTimeMethods()") public Object measureExecutionTime(ProceedingJoinPoint joinPoint) throws Throwable { long startTime = System.currentTimeMillis(); Object result = joinPoint.proceed(); long endTime = System.currentTimeMillis(); long executionTime = endTime - startTime; logger.info("{} executed in {} ms", joinPoint.getSignature(), executionTime); return result; } }
注意:
这种方法仅适用于使用@MeasureExecutionTime注解的方法。在生产环境中,建议关闭方法执行时间统计功能,以免影响系统性能。可以将切面类的实例化代码注释掉,或者在application.properties中添加以下配置:
logging.level.com.example.demo.aspect.MethodExecutionTimeAspect=OFF
-
统计其他方法的执行时间
@MeasureExecutionTime public void someMethod() { // ... }
这样,每次执行someMethod()方法时,都会输出执行时间
05-25
1518
11-14
1284
03-28
6317
03-29
1789
09-15
2万+
09-07
6207
04-13
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交