我希望跟踪API调用的响应时间。 然后我想在图表上绘制调用的响应时间(GET,PUT,POST DELETE)以比较时间差异。
这是我目前正在做的找到GET呼叫的响应时间,但我不太确定它是否正确。
@RequestMapping(value="/Students", method = RequestMethod.GET)
public ResponseEntity<List<Students>> getStudents()
{
long beginTime = System.currentTimeMillis();
List<Students> students = (List<Students>) repository.findAll();
if(students.isEmpty())
{
return new ResponseEntity(HttpStatus.NO_CONTENT);
}
long responseTime = System.currentTimeMillis() - beginTime;
logger.info("Response time for the call was "+responseTime);
return new ResponseEntity(students, HttpStatus.OK);
}
我相信我在将数据实际返回到客户端之前返回响应时间,这是完整的一点,但是我无法将它放在return语句之后,因为它将是无法访问的代码。
有没有更好的方法来尝试跟踪通话时间?
答案 0 :(得分:-1)
您可以使用springboot的周围建议,并在建议中记录时间。它的工作方式是一旦调用控制器,周围建议拦截它并启动一个计时器(记录所用的时间)。从建议我们使用jointPoint.proceed()方法进入主控制器。一旦控制器返回该值,您就可以记录定时器值。返回Object。
以下是示例代码:
build.grale中的包括
compile("org.aspectj:aspectjweaver:1.8.8")
创建一个组件类并放置@Aspect
@Component
@Aspect
public class advice{
@Around(("@annotation(logger)")
public Object loggerAspect(ProceedingJoinPoint joinPoint){
// start the Timer
Object object = jointPoint.proceed();
// log the timer value
return object;
}
}
在控制器方法中添加注释@logger。你已准备好出发。
希望这有帮助。
您可以参考link获取完整说明。