Próbuję dodać metryki do zwykłej aplikacji Java za pomocą danych Codahale. Chciałbym użyć adnotacji @Timed, ale nie jest dla mnie jasne, której MetricRegistry używa lub jak określić, której MetricRegistry użyć. Aplikacja jest zwykłą aplikacją Java 8, zbudowaną przy użyciu Maven 3, bez Spring, bez Hibernate.Codahale Metrics: użycie adnotacji metryk @Timed w zwykłej Javie
nie mogę znaleźć żadnej dokumentacji na temat sposobu realizacji @Timed w dokumentacji dropwizard: https://dropwizard.github.io/metrics/3.1.0/manual/
dodałem te zależności:
<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>
Kiedy używam Zautomatyzowane wywołanie czasowy, ja można uzyskać raporty, bo wiem, który jest stosowany MetricsRegistry:
static final MetricRegistry metrics = new MetricRegistry();
private void update() throws SQLException {
Timer.Context time = metrics.timer("domainobject.update").time();
try {
[...]
} finally {
time.stop();
}
}
Ale kiedy używam dużo bardziej elegancki @Timed adnotacji, nie mam pojęcia whic h rejestr jest używany, a więc nie mogę utworzyć reporter, co oznacza, że nie mogę dostać metryki zgłoszone (nie jestem nawet pewien, czy to faktycznie nic nie robi):
@Timed(name = "domainobject.update")
private void update() throws SQLException {
[...]
}
Proszę doradzić jak zrobić Atrybuty @Timed i inne metryki działają w zwykłej aplikacji Java.
Dodatkowe informacje: Powodem, dla którego znajduję to dziwne jest to, że dodałem framework Lombok i adnotacje @ Slf4j działają. Dodałem Lombok jako zależność w pom.xml maven:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.14.8</version>
</dependency>
I mogę użyć adnotacji @ klasy Sl4fj dodać rejestrator do klasy bez zaśmiecania zmienne członków:
@Slf4j
public class App {
public void logsome(){
log.info("Hello there");
}
}
Więc jeśli jest to możliwe, po prostu dodając zależność, myślę, że po prostu brakuje mi zależności lub konfiguracji, aby uzyskać pracę z adnotacją codahale @ Timed, jak opisano powyżej.
(przy okazji, sprawdź Lombok, będzie to ułatwić Ci życie: http://projectlombok.org/)
myślę będziesz out-of-szczęścia bez wiosennym AOP lub ręcznego konfigurowania AspectJ tkać swoje klasy. Tego typu rzeczy działają tylko z AOP, więc potrzebujesz czegoś, aby to zapewnić w swoich klasach. Na przykład, Spring AOP używa proxy JDK, CGLIB lub AspectJ do osiągnięcia tego – Alex
. Więc AspectJ byłby do zrobienia? Jak mam to zrobić? – Rolf
Jeszcze bardziej interesujące: Dlaczego na przykład @ Slf4j działa, a @ Timed nie? Nie używam jawnie AspectJ do działania Slf4j. – Rolf