当前位置: 首页 > 知识库问答 >
问题:

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

江永安
2023-03-14

我有一个与Dropwizard指标集成的Spring Boot应用程序。

当我将定时注释添加到一些API(控制器方法)中时,它显示在metrics链接上。

例如,对于下面的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个控制器,总共有130个API(方法),所以我想配置一个宽注释或自动注入定时注释。类似于:

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

我怎样才能做到这一点?

共有1个答案

丁俊爽
2023-03-14

@TimedClassController)级别不支持度量检测。以下是建议切入点的摘录(来自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级别匹配。

然后,您必须调整库源并为其使用自定义构建(请注意库许可证),或者在所有API方法上显式添加计时器度量注释。

 类似资料:
  • 在所有活动上添加导航抽屉的有效方法是什么?我不想在所有的活动和它们的布局中重复导航抽屉的代码。有没有可能以某种方式添加导航。BaseActivity(自定义类)中的抽屉,然后每个其他活动都将扩展BaseActivity以便拥有导航抽屉?

  • 我很难知道如何将我的JFXPanel(它是一个mp3播放器)集成到一个现有的Swing应用程序中,该应用程序是一个JFrame,其中添加了几个不同的JPanel。我对JavaFX是一个完全的noob,它与Swing非常不同。 我能够得到下面的代码来运行和做我想做的事情。它将播放mp3文件从一个目录,我有他们包含在。这是某人编写的示例中的代码。我的问题是,这段代码创建了JFrame,有main方法和

  • 我在跟踪AWS的文档,这里。除了apply插件之外,我可以将所有内容添加到项目的、和应用程序的中。当我补充:

  • 我已经在OpenShift上创建了Spring快速启动应用程序,它运行良好,显示了一个用户注册的网页,除了重新启动后它不记得新成员。我在想,这是因为我没有真正的数据库。所以我添加了一个PostgreSQL-9.2墨盒。所以我的问题是如何将postgresql准确地配置到OpenSift Spring应用程序中,以便这个web服务器能够存储重启后持续存在的数据。

  • 我希望将ASP.NET Web API添加到在Visual Studio2012中开发的ASP.NET MVC4 Web应用程序项目中。我必须执行哪些步骤才能向项目中添加一个正常工作的Web API?我知道我需要一个从ApiController派生出来的控制器,但这就是我所知道的全部。 null

  • 假设您在制作一个新的MVC(5)项目时忘了勾选Web API复选框(将其添加到项目中),那么您需要做什么来添加Web API并使其工作呢? 有许多迁移问题,但似乎没有一个是完整的,最新的步骤来将Web API添加到MVC5项目中,而且似乎已经改变了一些旧的答案。 在MVC4中添加Web API null