审核是有病吧,哪里有广告?你告诉我
我们在平常的开发过程中,经常会遇到去统计一个接口耗时,我们通常的做法就是在接口开始获取系统当前时间,接口结尾获取一下时间,两个时间做减法得到的数值来统计我们接口的耗时。
也不能说这种方法不行,只能说这种方法很low。而且很丑,代码很臃肿。
接下来我们来完成一个简单快捷,而且相对来说比较优雅的方式!
首先定义一个注解,是用来统计接口时长的!
/**
* 统计一个方法耗时注解
*/
@Documented
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface TimeConsuming{
}
这个注解便是作用在接口上,用来作为接口耗时统计的标识
接下来具体统计耗时的逻辑放到切面中,使用切面完成实际的的统计工作。
/**
* 计算耗时注解的实际计算过程方法
*/
@Aspect
@Component
public class TimeConsumingAspect {
private Logger logger = LoggerFactory.getLogger(TimeConsumingAspect.class);
@Pointcut(value = "@annotation(com.yuxuntoo.www.common.annotations.TimeConsuming)")
public void costTime(){ }
@Around("runTime()")
public Object costTimeAround(ProceedingJoinPoint joinPoint) {
Object obj = null;
try {
long beginTime = System.currentTimeMillis();
obj = joinPoint.proceed();
//获取方法名称
String method = joinPoint.getSignature().getName();
//获取类名称
String clazz = joinPoint.getSignature().getDeclaringTypeName();
//计算耗时
long cost = System.currentTimeMillis() - beginTime;
logger.info("类:[{}],方法:[{}] 接口耗时:[{}]", clazz, method, cost + "毫秒");
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return obj;
}
}
上面这个类中的方法中计算了耗时,统计了类名、方法名。最后输出了具体方法的执行过程中的耗时多少!
怎么使用呢?
我们只需要在我们需要统计的耗时的controller的方法上面使用我们自己定义的注解TimeConsuming即可得到我们想要的接口耗时时间!
使用方法如下所示,
@TimeConsuming
@PostMapping("set_key")
public ApiResult setKey(@NotNull(message = "key不能为空") String key, int seconds, Object o){
ApiResult apiResult = new ApiResult();
boolean setResult = redisService.set(key, seconds, o);
apiResult.setData(setResult);
return apiResult;
}
这篇文章因为文字段被标记为质量低,以下文字就是为了打破它的文字段而造成的质量低!
相信和我一样遇到这个问题的的小伙伴们,心里也已经暗自问候了这个产品经理的祖总十八代了吧!
算法实在是不敢苟同,文字的长短和文章的质量有毛线的关系吗?
我一句话能解决的问题,非要让我写这么多的文字来避免检测文章质量低的bug,是真坑呢!
欢迎大家关注关注我的工种昊《coder练习生》