diff --git a/module/spring-boot-data-mongodb/src/main/java/org/springframework/boot/data/mongodb/autoconfigure/DataMongoReactiveAutoConfiguration.java b/module/spring-boot-data-mongodb/src/main/java/org/springframework/boot/data/mongodb/autoconfigure/DataMongoReactiveAutoConfiguration.java index 7f83fa6423c1..6f698c357d88 100644 --- a/module/spring-boot-data-mongodb/src/main/java/org/springframework/boot/data/mongodb/autoconfigure/DataMongoReactiveAutoConfiguration.java +++ b/module/spring-boot-data-mongodb/src/main/java/org/springframework/boot/data/mongodb/autoconfigure/DataMongoReactiveAutoConfiguration.java @@ -16,9 +16,11 @@ package org.springframework.boot.data.mongodb.autoconfigure; +import java.lang.reflect.Method; import java.util.Optional; import com.mongodb.ClientSessionOptions; +import com.mongodb.MongoDriverInformation; import com.mongodb.reactivestreams.client.ClientSession; import com.mongodb.reactivestreams.client.MongoClient; import com.mongodb.reactivestreams.client.MongoDatabase; @@ -27,6 +29,7 @@ import org.jspecify.annotations.Nullable; import reactor.core.publisher.Mono; +import org.springframework.boot.SpringBootVersion; import org.springframework.boot.autoconfigure.AutoConfiguration; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.condition.ConditionalOnBean; @@ -76,10 +79,16 @@ @Import(DataMongoConfiguration.class) public final class DataMongoReactiveAutoConfiguration { + private static final MongoDriverInformation DRIVER_INFO = MongoDriverInformation.builder() + .driverName("spring-boot") + .driverVersion(SpringBootVersion.getVersion()) + .build(); + @Bean @ConditionalOnMissingBean(ReactiveMongoDatabaseFactory.class) SimpleReactiveMongoDatabaseFactory reactiveMongoDatabaseFactory(MongoProperties properties, MongoClient mongo, MongoConnectionDetails connectionDetails) { + appendMetadata(mongo); String database = properties.getDatabase(); if (database == null) { database = connectionDetails.getConnectionString().getDatabase(); @@ -88,6 +97,16 @@ SimpleReactiveMongoDatabaseFactory reactiveMongoDatabaseFactory(MongoProperties return new SimpleReactiveMongoDatabaseFactory(mongo, database); } + private static void appendMetadata(MongoClient mongoClient) { + try { + Method method = mongoClient.getClass().getMethod("appendMetadata", MongoDriverInformation.class); + method.invoke(mongoClient, DRIVER_INFO); + } + catch (Exception ex) { + // appendMetadata not available in this driver version — skip silently + } + } + @Bean @ConditionalOnMissingBean(ReactiveMongoOperations.class) ReactiveMongoTemplate reactiveMongoTemplate(ReactiveMongoDatabaseFactory reactiveMongoDatabaseFactory, diff --git a/module/spring-boot-data-mongodb/src/main/java/org/springframework/boot/data/mongodb/autoconfigure/MongoDatabaseFactoryConfiguration.java b/module/spring-boot-data-mongodb/src/main/java/org/springframework/boot/data/mongodb/autoconfigure/MongoDatabaseFactoryConfiguration.java index 3eabbf04ebea..1ce5345ff593 100644 --- a/module/spring-boot-data-mongodb/src/main/java/org/springframework/boot/data/mongodb/autoconfigure/MongoDatabaseFactoryConfiguration.java +++ b/module/spring-boot-data-mongodb/src/main/java/org/springframework/boot/data/mongodb/autoconfigure/MongoDatabaseFactoryConfiguration.java @@ -16,8 +16,12 @@ package org.springframework.boot.data.mongodb.autoconfigure; +import java.lang.reflect.Method; + +import com.mongodb.MongoDriverInformation; import com.mongodb.client.MongoClient; +import org.springframework.boot.SpringBootVersion; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.autoconfigure.condition.ConditionalOnSingleCandidate; import org.springframework.boot.mongodb.autoconfigure.MongoConnectionDetails; @@ -43,9 +47,15 @@ @ConditionalOnSingleCandidate(MongoClient.class) class MongoDatabaseFactoryConfiguration { + private static final MongoDriverInformation DRIVER_INFO = MongoDriverInformation.builder() + .driverName("spring-boot") + .driverVersion(SpringBootVersion.getVersion()) + .build(); + @Bean MongoDatabaseFactorySupport mongoDatabaseFactory(MongoClient mongoClient, MongoProperties properties, MongoConnectionDetails connectionDetails) { + appendMetadata(mongoClient); String database = properties.getDatabase(); if (database == null) { database = connectionDetails.getConnectionString().getDatabase(); @@ -54,4 +64,14 @@ MongoDatabaseFactorySupport mongoDatabaseFactory(MongoClient mongoClient, Mon return new SimpleMongoClientDatabaseFactory(mongoClient, database); } + private static void appendMetadata(MongoClient mongoClient) { + try { + Method method = mongoClient.getClass().getMethod("appendMetadata", MongoDriverInformation.class); + method.invoke(mongoClient, DRIVER_INFO); + } + catch (Exception ex) { + // appendMetadata not available in this driver version — skip silently + } + } + } diff --git a/module/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/autoconfigure/MongoClientFactorySupport.java b/module/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/autoconfigure/MongoClientFactorySupport.java index 5aa6ce3e9d69..401a6b1327bf 100644 --- a/module/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/autoconfigure/MongoClientFactorySupport.java +++ b/module/spring-boot-mongodb/src/main/java/org/springframework/boot/mongodb/autoconfigure/MongoClientFactorySupport.java @@ -25,6 +25,8 @@ import com.mongodb.MongoDriverInformation; import org.jspecify.annotations.Nullable; +import org.springframework.boot.SpringBootVersion; + /** * Base class for setup that is common to MongoDB client factories. * @@ -60,6 +62,7 @@ private void customize(Builder builder) { private MongoDriverInformation driverInformation() { return MongoDriverInformation.builder(MongoDriverInformation.builder().build()) .driverName("spring-boot") + .driverVersion(SpringBootVersion.getVersion()) .build(); }