优化Controller中接口耗时统计

审核是有病吧,哪里有广告?你告诉我

我们在平常的开发过程中,经常会遇到去统计一个接口耗时,我们通常的做法就是在接口开始获取系统当前时间,接口结尾获取一下时间,两个时间做减法得到的数值来统计我们接口的耗时。

也不能说这种方法不行,只能说这种方法很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练习生》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ybb_ymm

你的鼓励会是对我最大的支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值