Make MeterRegistry lazy in TimerObservationHandlerObservationRegistryCustomizer

Closes gh-31580
This commit is contained in:
Moritz Halbritter
2022-07-06 14:18:53 +02:00
parent e49597c1ae
commit 04391275c1
3 changed files with 13 additions and 5 deletions

View File

@@ -67,7 +67,7 @@ public class ObservationAutoConfiguration {
@Bean
TimerObservationHandlerObservationRegistryCustomizer enableTimerObservationHandler(
MeterRegistry meterRegistry) {
ObjectProvider<MeterRegistry> meterRegistry) {
return new TimerObservationHandlerObservationRegistryCustomizer(meterRegistry);
}

View File

@@ -20,6 +20,8 @@ import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.observation.TimerObservationHandler;
import io.micrometer.observation.ObservationRegistry;
import org.springframework.beans.factory.ObjectProvider;
/**
* Registers the {@link TimerObservationHandler} with an {@link ObservationRegistry}.
*
@@ -28,15 +30,15 @@ import io.micrometer.observation.ObservationRegistry;
class TimerObservationHandlerObservationRegistryCustomizer
implements ObservationRegistryCustomizer<ObservationRegistry> {
private final MeterRegistry meterRegistry;
private final ObjectProvider<MeterRegistry> meterRegistry;
TimerObservationHandlerObservationRegistryCustomizer(MeterRegistry meterRegistry) {
TimerObservationHandlerObservationRegistryCustomizer(ObjectProvider<MeterRegistry> meterRegistry) {
this.meterRegistry = meterRegistry;
}
@Override
public void customize(ObservationRegistry registry) {
registry.observationConfig().observationHandler(new TimerObservationHandler(this.meterRegistry));
registry.observationConfig().observationHandler(new TimerObservationHandler(this.meterRegistry.getObject()));
}
}

View File

@@ -21,6 +21,9 @@ import io.micrometer.core.instrument.simple.SimpleMeterRegistry;
import io.micrometer.observation.Observation;
import io.micrometer.observation.ObservationRegistry;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
import org.springframework.beans.factory.ObjectProvider;
import static org.assertj.core.api.Assertions.assertThat;
@@ -32,10 +35,13 @@ import static org.assertj.core.api.Assertions.assertThat;
class TimerObservationHandlerObservationRegistryCustomizerTests {
@Test
@SuppressWarnings("unchecked")
void customizeInstallsTimerObservationHandler() {
MeterRegistry meterRegistry = new SimpleMeterRegistry();
ObjectProvider<MeterRegistry> meterRegistryProvider = Mockito.mock(ObjectProvider.class);
Mockito.when(meterRegistryProvider.getObject()).thenReturn(meterRegistry);
TimerObservationHandlerObservationRegistryCustomizer sut = new TimerObservationHandlerObservationRegistryCustomizer(
meterRegistry);
meterRegistryProvider);
ObservationRegistry observationRegistry = ObservationRegistry.create();
sut.customize(observationRegistry);
Observation.start("test-1", observationRegistry).stop();