spring 如何使用Micrometer测量从控制器方法调用的异步方法的持续时间

5ktev3wc  于 2023-06-21  发布在  Spring
关注(0)|答案(1)|浏览(170)

我必须测量进入控制器的请求的全部时间,然后执行某个服务的异步方法:

@RestController
public class HelloController {

    @Autowired
    private SomeService someService;

    @GetMapping("/async")
    @Timed(value = "async.method.time", description = "Time taken to execute async method")
    public void async() throws InterruptedException {
        Thread.sleep(2000);

        someService.executeAsync();
    }
}

@Service
public class SomeService {

    @Async
    public void executeAsync() throws InterruptedException {
        Thread.sleep(2000);
        System.out.println("Async execution done!");
    }
}

实际上,如果我将@Timed注解放在async服务方法之上,那么它将被正确测量,但我也想用控制器方法测量时间。如何使用千分尺实现这一点?
先谢谢你了!

mspsb9vt

mspsb9vt1#

您可以使用@NewSpan注解。这种方式将具有完整的控制器执行时间以及@Async服务执行时间的分解。
注意:使用Sping Boot 3.1.0和Micrometer 1.10.0+,您可以遵循此blog,它指导您使用Spring Boot启用Micrometer注解所需的最低设置。

相关问题