注解 记录方法执行时间

Posted niuniuJAVA

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了注解 记录方法执行时间相关的知识,希望对你有一定的参考价值。


@GetMapping("/getAllRegion")
@StopWatchTime
public ResultBody getAllRegion() {

return ResultBody.success();
}




@Retention(RetentionPolicy.RUNTIME)
@Target({METHOD})
public @interface StopWatchTime {
String value() default "";
//时间单位 s || ms
String company() default "ms";
}


import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.time.StopWatch;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Aspect
@Component
@Slf4j
public class StopWatchTimeAdvice {

/*@Pointcut("@annotation(com.shopcc.bmg.compass.aspect.StopWatchTime)")
public void methodPointcut() {}*/

//@Around("methodPointcut() && @annotation(stopWatchTime)")
@Around("@annotation(stopWatchTime)")
public Object invoke(ProceedingJoinPoint thisJoinPoint, StopWatchTime stopWatchTime) throws Throwable {

log.info("Annotation company -->{}",stopWatchTime.company());

//方法名
String methodName = thisJoinPoint.getSignature().getName();
//参数
Object[] args = thisJoinPoint.getArgs();

StopWatch stopwatch = StopWatch.createStarted();

//执行目标方法
Object object = thisJoinPoint.proceed();

stopwatch.stop();

log.info("method name :{}({}) execute time :{}:{}",
methodName,args, stopwatch.getTime(StringUtils.equals(stopWatchTime.company(),"ms") ? TimeUnit.MILLISECONDS : TimeUnit.SECONDS),
stopWatchTime.company());

return object;
}
}

以上是关于注解 记录方法执行时间的主要内容,如果未能解决你的问题,请参考以下文章

记录一些注解的含义

Sleep() 方法后的代码片段没有被执行

如何使用支持库 25.0.0 及更高版本获取片段()

SpringAOP+自定义注解实现日志记录

SpringAOP+自定义注解实现日志记录

基于XML和注解的Spring定时器