diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesClientSettingsBuilderCustomizer.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesClientSettingsBuilderCustomizer.java index 691064cd5e6..f45770365ab 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesClientSettingsBuilderCustomizer.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesClientSettingsBuilderCustomizer.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -26,6 +26,7 @@ import com.mongodb.ServerAddress; import org.springframework.core.Ordered; import org.springframework.util.CollectionUtils; +import org.springframework.util.StringUtils; /** * A {@link MongoClientSettingsBuilderCustomizer} that applies properties from a @@ -90,7 +91,7 @@ public class MongoPropertiesClientSettingsBuilderCustomizer implements MongoClie } private void applyReplicaSet(MongoClientSettings.Builder builder) { - if (this.properties.getReplicaSetName() != null) { + if (StringUtils.hasText(this.properties.getReplicaSetName())) { builder.applyToClusterSettings( (cluster) -> cluster.requiredReplicaSetName(this.properties.getReplicaSetName())); } diff --git a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/PropertiesMongoConnectionDetails.java b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/PropertiesMongoConnectionDetails.java index 56b4bc470d1..04436c717b5 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/PropertiesMongoConnectionDetails.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/PropertiesMongoConnectionDetails.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,8 @@ import java.util.List; import com.mongodb.ConnectionString; +import org.springframework.util.StringUtils; + /** * Adapts {@link MongoProperties} to {@link MongoConnectionDetails}. * @@ -90,7 +92,7 @@ public class PropertiesMongoConnectionDetails implements MongoConnectionDetails private List getOptions() { List options = new ArrayList<>(); - if (this.properties.getReplicaSetName() != null) { + if (StringUtils.hasText(this.properties.getReplicaSetName())) { options.add("replicaSet=" + this.properties.getReplicaSetName()); } if (this.properties.getUsername() != null && this.properties.getAuthenticationDatabase() != null) { diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesClientSettingsBuilderCustomizerTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesClientSettingsBuilderCustomizerTests.java index 62c50649098..b50a3c1e72f 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesClientSettingsBuilderCustomizerTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoPropertiesClientSettingsBuilderCustomizerTests.java @@ -22,6 +22,7 @@ import java.util.List; import com.mongodb.MongoClientSettings; import com.mongodb.MongoCredential; import com.mongodb.ServerAddress; +import com.mongodb.connection.ClusterType; import org.bson.UuidRepresentation; import org.junit.jupiter.api.Test; @@ -81,6 +82,23 @@ class MongoPropertiesClientSettingsBuilderCustomizerTests { this.properties.setReplicaSetName("test"); MongoClientSettings settings = customizeSettings(); assertThat(settings.getClusterSettings().getRequiredReplicaSetName()).isEqualTo("test"); + assertThat(settings.getClusterSettings().getRequiredClusterType()).isEqualTo(ClusterType.REPLICA_SET); + } + + @Test + void replicaSetCanBeNull() { + this.properties.setReplicaSetName(null); + MongoClientSettings settings = customizeSettings(); + assertThat(settings.getClusterSettings().getRequiredReplicaSetName()).isNull(); + assertThat(settings.getClusterSettings().getRequiredClusterType()).isEqualTo(ClusterType.UNKNOWN); + } + + @Test + void replicaSetCanBeEmptyString() { + this.properties.setReplicaSetName(""); + MongoClientSettings settings = customizeSettings(); + assertThat(settings.getClusterSettings().getRequiredReplicaSetName()).isNull(); + assertThat(settings.getClusterSettings().getRequiredClusterType()).isEqualTo(ClusterType.UNKNOWN); } @Test diff --git a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/PropertiesMongoConnectionDetailsTests.java b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/PropertiesMongoConnectionDetailsTests.java index 6d73d9d7ba5..0b529d6e334 100644 --- a/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/PropertiesMongoConnectionDetailsTests.java +++ b/spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/PropertiesMongoConnectionDetailsTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2012-2023 the original author or authors. + * Copyright 2012-2024 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -104,6 +104,20 @@ class PropertiesMongoConnectionDetailsTests { assertThat(connectionString.getRequiredReplicaSetName()).isEqualTo("test"); } + @Test + void replicaSetCanBeNull() { + this.properties.setReplicaSetName(null); + ConnectionString connectionString = getConnectionString(); + assertThat(connectionString.getRequiredReplicaSetName()).isNull(); + } + + @Test + void replicaSetCanBeBlank() { + this.properties.setReplicaSetName(""); + ConnectionString connectionString = getConnectionString(); + assertThat(connectionString.getRequiredReplicaSetName()).isNull(); + } + @Test void whenAdditionalHostsAreConfiguredThenTheyAreIncludedInHostsOfConnectionString() { this.properties.setHost("mongo1.example.com");