gpt4 book ai didi

java - 如何自动将 Dropwizard Metrics @Timed 添加到 Spring Boot 应用程序中的所有 API 方法中?

转载 作者:行者123 更新时间:2023-12-01 16:31:54 25 4
gpt4 key购买 nike

我有一个与 Dropwizard Metrics 集成的 Spring Boot 应用程序,如下 link

当我将 @Timed 注释添加到某些 API( Controller 方法)中时,它会显示在指标链接上。

例如,对于下面的RestController:

@RestController
public class TestController {
@GET
@Path("/ping")
@Timed
@ApiOperation("Ping server")
public Response Ping() {
return Response.ok().build();
}
}

结果如下:

"timers": {
"com.test.testcontroller.Ping": {
"count": 0,
"max": 0.0,
"mean": 0.0,
"min": 0.0,
"p50": 0.0,
"p75": 0.0,
"p95": 0.0,
"p98": 0.0,
"p99": 0.0,
"p999": 0.0,
"stddev": 0.0,
"m15_rate": 0.0,
"m1_rate": 0.0,
"m5_rate": 0.0,
"mean_rate": 0.0,
"duration_units": "seconds",
"rate_units": "calls/second"
}
}

我有大约 20 个 Controller ,总共 130 个 API(方法),因此我想配置一个宽注释或自动注入(inject) @Timed 注释。像这样的东西:

@RestController
@Timed
public class TestController {
@GET
@Path("/ping")
@ApiOperation("Ping server")
// timed will auto applied in here
public Response Ping() {
return Response.ok().build();
}
}

我怎样才能实现这一目标?

最佳答案

@Timed 度量仪器 is not supported at Class (Controller) level 。这里是建议的切入点的摘录(来自 metrics-spring 集成库):

class TimedMethodInterceptor extends AbstractMetricMethodInterceptor<Timed, Timer> implements Ordered {

public static final Class<Timed> ANNOTATION = Timed.class;
public static final Pointcut POINTCUT = new AnnotationMatchingPointcut(null, ANNOTATION);
public static final MethodFilter METHOD_FILTER = new AnnotationFilter(ANNOTATION, PROXYABLE_METHODS);

public TimedMethodInterceptor(final MetricRegistry metricRegistry, final Class<?> targetClass) {
super(metricRegistry, targetClass, ANNOTATION, METHOD_FILTER);
}
//...
}

正如您从上面的摘录中看到的,@Timed 注释仅在 method 级别匹配。

然后,您必须调整库源并为其使用自定义构建 ( take good note of the library licence ),或者在所有 API 方法上显式添加计时器指标注释。

关于java - 如何自动将 Dropwizard Metrics @Timed 添加到 Spring Boot 应用程序中的所有 API 方法中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62021381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com