我正在尝试使用codahale metrics为普通的Java应用程序添加度量标准。我想使用@Timed注释,但是我不清楚它使用哪个MetricRegistry,或者如何告诉它使用哪个MetricRegistry。该应用程序是一个纯Java 8应用程序,使用Maven 3构建,没有Spring,没有Hibernate。
我找不到任何有关在dropwizard文档中实现@Timed的文档:https://dropwizard.github.io/metrics/3.1.0/manual/
我已经添加了这些依赖项:
<dependency>
<groupId>io.dropwizard.metrics</groupId>
<artifactId>metrics-core</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>com.codahale.metrics</groupId>
<artifactId>metrics-annotation</artifactId>
<version>3.0.2</version>
</dependency>
当我使用编程调用Timer时,我可以得到报告,因为我知道使用了哪个MetricsRegistry:
static final MetricRegistry metrics = new MetricRegistry();
private void update() throws SQLException {
Timer.Context time = metrics.timer("domainobject.update").time();
try {
[...]
} finally {
time.stop();
}
}
但是当我使用更加优雅的@Timed注解时,我不知道使用哪个注册表,因此我无法创建报告器,这意味着我无法获取报告的指标(我甚至不确定这是否实际上会有任何作用):
@Timed(name = "domainobject.update")
private void update() throws SQLException {
[...]
}
请指导如何在普通Java应用程序中使用@Timed和其他指标注释。 附加信息:我觉得奇怪的原因是我已经添加了Lombok框架,@Slf4j注释确实起作用了。我在Maven的pom.xml文件中添加了Lombok依赖项。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.14.8</version>
</dependency>
我可以使用@Sl4fj类注释来向类中添加日志记录器,而不会弄乱成员变量:
@Slf4j
public class App {
public void logsome(){
log.info("Hello there");
}
}
所以如果只需添加一个依赖项就能实现,我想我可能只是缺少某个依赖项或配置才能让codahale的@Timed注释正常工作,如上所述。
(顺便说一下,看看Lombok,它会让你的生活更轻松: http://projectlombok.org/ )