Sto tentando di aggiungere metriche a un'applicazione Java semplice utilizzando le metriche di codahale. Mi piacerebbe usare l'annotazione @Timed, ma non è chiaro per me quale MetricRegistry utilizza, o come dirgli quale MetricRegistry usare. L'applicazione è una semplice applicazione Java 8, realizzata con Maven 3, senza Spring, senza Hibernate.Metriche di Codahale: utilizzo dell'annotazione delle metriche @Timed in Java semplice
non riesco a trovare alcuna documentazione su come implementare @Timed nella documentazione dropwizard: https://dropwizard.github.io/metrics/3.1.0/manual/
Ho aggiunto queste dipendenze:
<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>
Quando uso una chiamata programmatico a Timer, I possono ottenere rapporti perché so che MetricsRegistry viene utilizzato:
static final MetricRegistry metrics = new MetricRegistry();
private void update() throws SQLException {
Timer.Context time = metrics.timer("domainobject.update").time();
try {
[...]
} finally {
time.stop();
}
}
Ma quando uso il molto più elegante di annotazione @Timed, non ho idea whic h Registro di sistema viene utilizzato, e quindi non in grado di creare un reporter, il che significa che non posso ottenere le metriche riportati (io non sono nemmeno sicuro se questo in realtà fa nulla):
@Timed(name = "domainobject.update")
private void update() throws SQLException {
[...]
}
Si prega di avvisare su come fare le annotazioni @Timed e altre metriche funzionano in una normale applicazione Java.
Altre informazioni: Il motivo per cui trovo questo strano è che ho aggiunto il framework Lombok e le annotazioni @ Slf4j funzionano. Ho aggiunto Lombok come una dipendenza nella pom.xml Maven:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.14.8</version>
</dependency>
E posso usare l'annotazione @ classe Sl4fj per aggiungere un logger alla classe senza ingombrare le variabili membro:
@Slf4j
public class App {
public void logsome(){
log.info("Hello there");
}
}
Quindi, se ciò è possibile semplicemente aggiungendo una dipendenza, ritengo che manchi solo una dipendenza o una configurazione per far funzionare l'annotazione codahale @Timed, come descritto sopra.
(a proposito, check out Lombok, renderà la vita più facile: http://projectlombok.org/)
Penso che sarà out-of-fortuna senza molla AOP o impostare manualmente fino AspectJ per tessere le classi. Questo tipo di cose funziona solo con AOP, quindi hai bisogno di qualcosa per fornirlo nelle tue classi. Ad esempio, Spring AOP utilizza JDK Proxies, CGLIB o AspectJ per ottenere questo – Alex
Quindi AspectJ sarebbe la strada da percorrere? Come faccio a farlo? – Rolf
Ancora più interessante: perché @ Slf4j funziona, per esempio, e @ Timed no? Non sto usando esplicitamente AspectJ per far funzionare Slf4j. – Rolf