java - 如何在 Spring Boot 中分析复杂的 http 请求处理?

标签 java spring spring-boot profiling spring-restcontroller

我有复杂的 @RestController 方法,如下所示:

@PostMapping("{id}")
@PreAuthorize("hasRole('ADMIN')")
@Transactional
public Response handleRequest(@PathVariable("id") long id, @RequestBody @Valid Request request) {
    return service.handleRequest(id, request);
}

我们的请求处理速度非常慢,因此我们想检查特定请求处理任务花费了多少时间。不幸的是,很多事情都是在我的方法之外完成的,例如:

  • 反序列化请求
  • 正在验证
  • 权限检查
  • 开始和结束交易
  • 正在序列化响应

有没有办法简单地测量所有这些部件?也许有一组接收跟踪消息的记录器,以便我可以在每个步骤结束时提取时间戳?

我现在看到的唯一方法是更改​​该方法以接受 HttpServletRequest 和 HttpServletResponse 并在方法体内执行这些部分。但这样我就会失去很多 Spring Boot 的好处。

最佳答案

您还可以检查为执行器添加自定义指标的教程,但这似乎有点复杂(但您必须编写自己的指标bean并将其注入(inject)代码中,覆盖objectMapper进行映射等... )

或者可能激活 jackson、spring-security、javax.validation 上的日志记录信息,以检查日志中每个操作的时间,但不是很精确

关于java - 如何在 Spring Boot 中分析复杂的 http 请求处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54651883/

相关文章:

java - 抛出 NullPointerException 的最短代码?

java - 使用 Spring HttpInvoker 的最简单的远程服务器

java - 在存在 XFF header 的情况下将 `AuthenticationFailureBadCredentialsEvent` 与远程地址关联

java - Spring Boot 应用程序 Heroku PostgreSQL 错误 : GenerationTarget encountered exception accepting command : Error executing DDL . .. 通过 JDBC 语句

java - 休息 Controller ,提供枚举名称但将其值保存在数据库中

java - 使用java在mysql中创建用户

Java - Spring Ws - 在 XSD 文件中加载相对包含 (Tomcat 8)

java - 这个语法是什么意思 (List<? extends Number> data)

java - 如何在 Spring MVC 中的同一 @RequestMapping 中为参数映射不同的值?

java - 如何将值从 Thymeleaf 传递到 Ajax 调用