From a569cc343d1a0d7a63872781631b0df12cb0791b Mon Sep 17 00:00:00 2001 From: cfredri4 Date: Mon, 29 Sep 2025 21:46:02 +0200 Subject: [PATCH] Configure global observation registry This change configures the global observation registry. Signed-off-by: cfredri4 --- .../ObservationAutoConfiguration.java | 3 ++- .../autoconfigure/ObservationProperties.java | 15 ++++++++++++ .../ObservationRegistryPostProcessor.java | 23 +++++++++++++++++-- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/module/spring-boot-micrometer-observation/src/main/java/org/springframework/boot/micrometer/observation/autoconfigure/ObservationAutoConfiguration.java b/module/spring-boot-micrometer-observation/src/main/java/org/springframework/boot/micrometer/observation/autoconfigure/ObservationAutoConfiguration.java index 630ec7df5e05..8d7d067a6a1e 100644 --- a/module/spring-boot-micrometer-observation/src/main/java/org/springframework/boot/micrometer/observation/autoconfigure/ObservationAutoConfiguration.java +++ b/module/spring-boot-micrometer-observation/src/main/java/org/springframework/boot/micrometer/observation/autoconfigure/ObservationAutoConfiguration.java @@ -52,13 +52,14 @@ public final class ObservationAutoConfiguration { @Bean static ObservationRegistryPostProcessor observationRegistryPostProcessor( + ObjectProvider properties, ObjectProvider> observationRegistryCustomizers, ObjectProvider observationPredicates, ObjectProvider> observationConventions, ObjectProvider> observationHandlers, ObjectProvider observationHandlerGroups, ObjectProvider observationFilters) { - return new ObservationRegistryPostProcessor(observationRegistryCustomizers, observationPredicates, + return new ObservationRegistryPostProcessor(properties, observationRegistryCustomizers, observationPredicates, observationConventions, observationHandlers, observationHandlerGroups, observationFilters); } diff --git a/module/spring-boot-micrometer-observation/src/main/java/org/springframework/boot/micrometer/observation/autoconfigure/ObservationProperties.java b/module/spring-boot-micrometer-observation/src/main/java/org/springframework/boot/micrometer/observation/autoconfigure/ObservationProperties.java index 194052f368f8..d7953c771a5a 100644 --- a/module/spring-boot-micrometer-observation/src/main/java/org/springframework/boot/micrometer/observation/autoconfigure/ObservationProperties.java +++ b/module/spring-boot-micrometer-observation/src/main/java/org/springframework/boot/micrometer/observation/autoconfigure/ObservationProperties.java @@ -32,6 +32,13 @@ @ConfigurationProperties("management.observations") public class ObservationProperties { + /** + * Whether auto-configured ObservationRegistry implementations should be bound to the global + * static registry on Observations. For testing, set this to 'false' to maximize test + * independence. + */ + private boolean useGlobalRegistry = true; + private final Http http = new Http(); /** @@ -47,6 +54,14 @@ public class ObservationProperties { private final LongTaskTimer longTaskTimer = new LongTaskTimer(); + public boolean isUseGlobalRegistry() { + return this.useGlobalRegistry; + } + + public void setUseGlobalRegistry(boolean useGlobalRegistry) { + this.useGlobalRegistry = useGlobalRegistry; + } + public Map getEnable() { return this.enable; } diff --git a/module/spring-boot-micrometer-observation/src/main/java/org/springframework/boot/micrometer/observation/autoconfigure/ObservationRegistryPostProcessor.java b/module/spring-boot-micrometer-observation/src/main/java/org/springframework/boot/micrometer/observation/autoconfigure/ObservationRegistryPostProcessor.java index ab3ae334f818..5257622a72d8 100644 --- a/module/spring-boot-micrometer-observation/src/main/java/org/springframework/boot/micrometer/observation/autoconfigure/ObservationRegistryPostProcessor.java +++ b/module/spring-boot-micrometer-observation/src/main/java/org/springframework/boot/micrometer/observation/autoconfigure/ObservationRegistryPostProcessor.java @@ -21,6 +21,7 @@ import io.micrometer.observation.ObservationHandler; import io.micrometer.observation.ObservationPredicate; import io.micrometer.observation.ObservationRegistry; +import io.micrometer.observation.Observations; import org.jspecify.annotations.Nullable; import org.springframework.beans.BeansException; @@ -36,6 +37,8 @@ */ class ObservationRegistryPostProcessor implements BeanPostProcessor { + private final ObjectProvider properties; + private final ObjectProvider> observationRegistryCustomizers; private final ObjectProvider observationPredicates; @@ -50,12 +53,14 @@ class ObservationRegistryPostProcessor implements BeanPostProcessor { private volatile @Nullable ObservationRegistryConfigurer configurer; - ObservationRegistryPostProcessor(ObjectProvider> observationRegistryCustomizers, + ObservationRegistryPostProcessor(ObjectProvider properties, + ObjectProvider> observationRegistryCustomizers, ObjectProvider observationPredicates, ObjectProvider> observationConventions, ObjectProvider> observationHandlers, ObjectProvider observationHandlerGroups, ObjectProvider observationFilters) { + this.properties = properties; this.observationRegistryCustomizers = observationRegistryCustomizers; this.observationPredicates = observationPredicates; this.observationConventions = observationConventions; @@ -67,11 +72,16 @@ class ObservationRegistryPostProcessor implements BeanPostProcessor { @Override public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { if (bean instanceof ObservationRegistry registry) { - getConfigurer().configure(registry); + postProcessObservationRegistry(registry); } return bean; } + private void postProcessObservationRegistry(ObservationRegistry registry) { + getConfigurer().configure(registry); + setGlobalRegistryIfNecessary(registry); + } + private ObservationRegistryConfigurer getConfigurer() { ObservationRegistryConfigurer configurer = this.configurer; if (configurer == null) { @@ -83,4 +93,13 @@ private ObservationRegistryConfigurer getConfigurer() { return configurer; } + private void setGlobalRegistryIfNecessary(ObservationRegistry registry) { + if (this.properties.getObject().isUseGlobalRegistry() && !isGlobalRegistry(registry)) { + Observations.setRegistry(registry); + } + } + + private boolean isGlobalRegistry(ObservationRegistry registry) { + return registry == Observations.getGlobalRegistry(); + } }