From 04391275c16de5d1e92e583e62864c197d3fbe74 Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Wed, 6 Jul 2022 14:18:53 +0200 Subject: [PATCH] Make MeterRegistry lazy in TimerObservationHandlerObservationRegistryCustomizer Closes gh-31580 --- .../observation/ObservationAutoConfiguration.java | 2 +- ...erObservationHandlerObservationRegistryCustomizer.java | 8 +++++--- ...ervationHandlerObservationRegistryCustomizerTests.java | 8 +++++++- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/ObservationAutoConfiguration.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/ObservationAutoConfiguration.java index 546e32a76f..77737d6653 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/ObservationAutoConfiguration.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/ObservationAutoConfiguration.java @@ -67,7 +67,7 @@ public class ObservationAutoConfiguration { @Bean TimerObservationHandlerObservationRegistryCustomizer enableTimerObservationHandler( - MeterRegistry meterRegistry) { + ObjectProvider meterRegistry) { return new TimerObservationHandlerObservationRegistryCustomizer(meterRegistry); } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/TimerObservationHandlerObservationRegistryCustomizer.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/TimerObservationHandlerObservationRegistryCustomizer.java index 55ad5b3072..232d6a66e7 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/TimerObservationHandlerObservationRegistryCustomizer.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/observation/TimerObservationHandlerObservationRegistryCustomizer.java @@ -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 { - private final MeterRegistry meterRegistry; + private final ObjectProvider meterRegistry; - TimerObservationHandlerObservationRegistryCustomizer(MeterRegistry meterRegistry) { + TimerObservationHandlerObservationRegistryCustomizer(ObjectProvider 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())); } } diff --git a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/observation/TimerObservationHandlerObservationRegistryCustomizerTests.java b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/observation/TimerObservationHandlerObservationRegistryCustomizerTests.java index 7180a55e03..d52fa0a3a4 100644 --- a/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/observation/TimerObservationHandlerObservationRegistryCustomizerTests.java +++ b/spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/observation/TimerObservationHandlerObservationRegistryCustomizerTests.java @@ -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 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();