From 0e1ff168d6de79805d851b8899106418fcddae5f Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Thu, 23 Oct 2025 09:51:51 +0200 Subject: [PATCH] Update observability configuration section. Recommend using driver native API for observability. See #5009 See #5078 Original pull request #5080 --- .../observability/ContextProviderFactory.java | 3 +++ .../observability/MongoHandlerContext.java | 3 +++ .../MongoHandlerObservationConvention.java | 5 +++- .../MongoObservationCommandListener.java | 3 +++ .../mongodb/observability/package-info.java | 3 +++ .../pages/observability/observability.adoc | 24 +++++++++++++++---- 6 files changed, 36 insertions(+), 5 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/ContextProviderFactory.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/ContextProviderFactory.java index f605b9671..d28cba273 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/ContextProviderFactory.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/ContextProviderFactory.java @@ -37,6 +37,9 @@ import com.mongodb.reactivestreams.client.ReactiveContextProvider; /** * Factory to create a {@link ContextProvider} to propagate the request context across tasks. Requires either * {@link SynchronousContextProvider} or {@link ReactiveContextProvider} to be present. + *

+ * NOTE: MongoDB Java Driver 5.7+ comes with observability directly built in which can be configured + * via {@code MongoClientSettings.Builder#observabilitySettings(ObservabilitySettings)}. * * @author Mark Paluch * @since 3.0 diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerContext.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerContext.java index cab9cd5cb..e91f1f068 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerContext.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerContext.java @@ -35,6 +35,9 @@ import com.mongodb.event.CommandSucceededEvent; /** * A {@link Observation.Context} that contains MongoDB events. + *

+ * NOTE: MongoDB Java Driver 5.7+ comes with observability directly built in which can be configured + * via {@code MongoClientSettings.Builder#observabilitySettings(ObservabilitySettings)}. * * @author Marcin Grzejszczak * @author Greg Turnquist diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerObservationConvention.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerObservationConvention.java index 7d1100c58..6081bf9f6 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerObservationConvention.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoHandlerObservationConvention.java @@ -20,7 +20,10 @@ import io.micrometer.observation.ObservationConvention; /** * {@link ObservationConvention} for {@link MongoHandlerContext}. - * + *

+ * NOTE: MongoDB Java Driver 5.7+ comes with observability directly built in which can be configured + * via {@code MongoClientSettings.Builder#observabilitySettings(ObservabilitySettings)}. + * * @author Greg Turnquist * @since 4 */ diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoObservationCommandListener.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoObservationCommandListener.java index 314da09ea..140c54d3d 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoObservationCommandListener.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/MongoObservationCommandListener.java @@ -36,6 +36,9 @@ import com.mongodb.event.CommandSucceededEvent; /** * Implement MongoDB's {@link CommandListener} using Micrometer's {@link Observation} API. + *

+ * NOTE: MongoDB Java Driver 5.7+ comes with observability directly built in which can be configured + * via {@code MongoClientSettings.Builder#observabilitySettings(ObservabilitySettings)}. * * @author OpenZipkin Brave Authors * @author Marcin Grzejszczak diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/package-info.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/package-info.java index d6319e5f4..b9cb874dc 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/package-info.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/observability/package-info.java @@ -1,5 +1,8 @@ /** * Infrastructure to provide driver observability using Micrometer. + *

+ * NOTE: MongoDB Java Driver 5.7+ comes with observability directly built in which can be configured + * via {@code MongoClientSettings.Builder#observabilitySettings(ObservabilitySettings)}. */ @org.jspecify.annotations.NullMarked package org.springframework.data.mongodb.observability; diff --git a/src/main/antora/modules/ROOT/pages/observability/observability.adoc b/src/main/antora/modules/ROOT/pages/observability/observability.adoc index 8a9b0a1ee..3e18d5f13 100644 --- a/src/main/antora/modules/ROOT/pages/observability/observability.adoc +++ b/src/main/antora/modules/ROOT/pages/observability/observability.adoc @@ -3,11 +3,27 @@ [[mongodb.observability]] = Observability -Spring Data MongoDB currently has the most up-to-date code to support Observability in your MongoDB application. -These changes, however, haven't been picked up by Spring Boot (yet). -Until those changes are applied, if you wish to use Spring Data MongoDB's flavor of Observability, you must carry out the following steps. +[NOTE] +==== +MongoDB Java Driver 5.7+ comes with observability directly built in. +We recommend switching to the driver native `ObservabilitySettings`, which can be configured as outlined below: +[source,java] +---- +@Bean +MongoClientSettingsBuilderCustomizer mongoDbObservabilitySettings(ObservationRegistry registry) { + return (clientSettingsBuilder) -> { + clientSettingsBuilder.observabilitySettings(ObservabilitySettings.micrometerBuilder() + .observationRegistry(observationRegistry) + .build()); + }; +} +---- +In the light of driver native observability support, the types within the Spring Data provided _org.springframework.data.mongodb.observability_ package will not see further development and are subject to deprecation/removal in subsequent releases. +==== + +To use Spring Data MongoDB's flavor of Observability you must: -. First of all, you must opt into Spring Data MongoDB's configuration settings by customizing `MongoClientSettings` through either your `@SpringBootApplication` class or one of your configuration classes. +. opt into Spring Data MongoDB's configuration settings by customizing `MongoClientSettings` through either your `@SpringBootApplication` class or one of your configuration classes. + .Registering MongoDB Micrometer customizer setup ====