跟踪springboot中API调用的响应时间
我希望跟踪API调用的响应时间。 然后,我想在一张图表上绘制调用(GET、PUT、POST DELETE)的响应时间,以比较时间差 这是我目前正在做的,以找到一个GET呼叫的响应时间,但我不太确定它是否正确跟踪springboot中API调用的响应时间,spring,api,Spring,Api,我希望跟踪API调用的响应时间。 然后,我想在一张图表上绘制调用(GET、PUT、POST DELETE)的响应时间,以比较时间差 这是我目前正在做的,以找到一个GET呼叫的响应时间,但我不太确定它是否正确 @RequestMapping(value="/Students", method = RequestMethod.GET) public ResponseEntity<List<Students>> getStudents() { l
@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);
}
@RequestMapping(value=“/Students”,method=RequestMethod.GET)
公众反应学生(英文)
{
long beginTime=System.currentTimeMillis();
List students=(List)repository.findAll();
if(students.isEmpty())
{
返回新的响应属性(HttpStatus.NO_内容);
}
长响应时间=System.currentTimeMillis()-beginTime;
logger.info(“呼叫的响应时间为”+响应时间);
返回新的ResponseEntity(学生,HttpStatus.OK);
}
我相信我是在将数据返回到客户端之前返回响应时间的,这就是本文的重点,但我不能将其放在return语句之后,因为这是无法访问的代码
有没有更好的方法来跟踪通话时间?您可以使用springboot的Around建议,并在建议中记录通话时间。它的工作方式是,一旦向控制器发出一个呼叫,Around通知就会截获它并启动一个计时器(记录所用的时间)。根据建议,我们使用jointPoint.procedure()方法处理主控制器。控制器返回值后,可以记录计时器值。返回对象 以下是示例代码: in 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。你可以走了
希望这有帮助
您可以参考以获取完整的解释。可能重复使用弹簧启动执行器,它将记录这方面的指标。您可以将其流式传输到Grafana(当然还有其他选项)。Hi@M.Deinum,感谢您的回复。从spring导出度量的最佳方法是什么,这样我就可以在grafana上可视化它?我在将其导出到XDB时遇到了问题,我不确定这是否是最好的方法。请查看Spring Boot提供的一个导出程序(也请查看)