注解 记录方法执行时间
@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;
}
}
能力是有限的,努力是无限的。