Springboot 注解 之接口请求计时
发表于:2022-10-21浏览:26次TAG: #注解
# 注解代码
```
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 TakeTime {
}
```
# AOP
```
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import javax.servlet.http.HttpServletRequest;
/**
* 耗时统计
*/
@Aspect
@Component
public class TakeTimeAspect {
private static final Logger logger = LoggerFactory.getLogger(TakeTimeAspect.class);
//统计请求的处理时间
ThreadLocal startTime = new ThreadLocal<>();
/**
* 带有@TakeTime注解的方法
*/
@Pointcut("@annotation(org.jeecg.common.aspect.annotation.TakeTime)")
public void log() {
}
@Before("log()")
public void doBefore(JoinPoint joinPoint) throws Throwable {
startTime.set(System.currentTimeMillis());
}
@AfterReturning(returning = "ret", pointcut = "log()")
public void doAfterReturning(Object ret) {
//接收到请求,记录请求内容
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
//处理完请求后,返回内容
logger.error("接口 [ {} ] 响应时间为 {} ms:" , request.getRequestURI().toString() , (System.currentTimeMillis() - startTime.get()));
}
}
```
# 使用引用
```
@TakeTime
@ApiOperation("首页信息")
@GetMapping("/index")
public Result index() {
Result result = new Result<>();
// 获取用户部门信息
JSONObject obj = new JSONObject();
obj.put("banners",wxEnlistService.courseBannerList());
result.setResult(obj);
result.setMessage("获取首页信息成功");
result.setSuccess(true);
return result;
}
```