Browse Source

Add spring.data.mongodb.protocol property

This commit allows configuring the MongoDB connection
protocol using the 'spring.data.mongodb.protocol' property.

See gh-44366

Signed-off-by: Dmytro Nosan <dimanosan@gmail.com>
pull/44432/head
Dmytro Nosan 11 months ago committed by Moritz Halbritter
parent
commit
35db02bf48
  1. 13
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java
  2. 12
      spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/PropertiesMongoConnectionDetails.java
  3. 16
      spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json
  4. 17
      spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoAutoConfigurationTests.java
  5. 7
      spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/PropertiesMongoConnectionDetailsTests.java

13
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/MongoProperties.java

@ -51,6 +51,11 @@ public class MongoProperties { @@ -51,6 +51,11 @@ public class MongoProperties {
*/
public static final String DEFAULT_URI = "mongodb://localhost/test";
/**
* Protocol to be used for the MongoDB connection. Ignored if 'uri' is set.
*/
private String protocol = "mongodb";
/**
* Mongo server host. Ignored if 'uri' is set.
*/
@ -117,6 +122,14 @@ public class MongoProperties { @@ -117,6 +122,14 @@ public class MongoProperties {
*/
private Boolean autoIndexCreation;
public void setProtocol(String protocol) {
this.protocol = protocol;
}
public String getProtocol() {
return this.protocol;
}
public String getHost() {
return this.host;
}

12
spring-boot-project/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/mongo/PropertiesMongoConnectionDetails.java

@ -51,11 +51,11 @@ public class PropertiesMongoConnectionDetails implements MongoConnectionDetails @@ -51,11 +51,11 @@ public class PropertiesMongoConnectionDetails implements MongoConnectionDetails
@Override
public ConnectionString getConnectionString() {
// mongodb://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database.collection][?options]]
// protocol://[username:password@]host1[:port1][,host2[:port2],...[,hostN[:portN]]][/[database.collection][?options]]
if (this.properties.getUri() != null) {
return new ConnectionString(this.properties.getUri());
}
StringBuilder builder = new StringBuilder("mongodb://");
StringBuilder builder = new StringBuilder(getProtocol()).append("://");
if (this.properties.getUsername() != null) {
builder.append(encode(this.properties.getUsername()));
builder.append(":");
@ -83,6 +83,14 @@ public class PropertiesMongoConnectionDetails implements MongoConnectionDetails @@ -83,6 +83,14 @@ public class PropertiesMongoConnectionDetails implements MongoConnectionDetails
return new ConnectionString(builder.toString());
}
private String getProtocol() {
String protocol = this.properties.getProtocol();
if (StringUtils.hasText(protocol)) {
return protocol;
}
return "mongodb";
}
private String encode(String input) {
return URLEncoder.encode(input, StandardCharsets.UTF_8);
}

16
spring-boot-project/spring-boot-autoconfigure/src/main/resources/META-INF/additional-spring-configuration-metadata.json

@ -2924,6 +2924,22 @@ @@ -2924,6 +2924,22 @@
}
]
},
{
"name": "spring.data.mongodb.protocol",
"values": [
{
"value": "mongodb"
},
{
"value": "mongodb+srv"
}
],
"providers": [
{
"name": "any"
}
]
},
{
"name": "spring.data.redis.lettuce.read-from",
"values": [

17
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/MongoAutoConfigurationTests.java

@ -24,6 +24,7 @@ import com.mongodb.MongoCredential; @@ -24,6 +24,7 @@ import com.mongodb.MongoCredential;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.internal.MongoClientImpl;
import com.mongodb.connection.ClusterConnectionMode;
import com.mongodb.connection.SslSettings;
import org.junit.jupiter.api.Test;
@ -98,6 +99,22 @@ class MongoAutoConfigurationTests { @@ -98,6 +99,22 @@ class MongoAutoConfigurationTests {
});
}
@Test
void configuresProtocol() {
this.contextRunner.withPropertyValues("spring.data.mongodb.protocol=mongodb+srv").run((context) -> {
MongoClientSettings settings = getSettings(context);
assertThat(settings.getClusterSettings().getMode()).isEqualTo(ClusterConnectionMode.MULTIPLE);
});
}
@Test
void defaultProtocol() {
this.contextRunner.run((context) -> {
MongoClientSettings settings = getSettings(context);
assertThat(settings.getClusterSettings().getMode()).isEqualTo(ClusterConnectionMode.SINGLE);
});
}
@Test
void configuresWithoutSslWhenDisabledWithBundle() {
this.contextRunner

7
spring-boot-project/spring-boot-autoconfigure/src/test/java/org/springframework/boot/autoconfigure/mongo/PropertiesMongoConnectionDetailsTests.java

@ -86,6 +86,13 @@ class PropertiesMongoConnectionDetailsTests { @@ -86,6 +86,13 @@ class PropertiesMongoConnectionDetailsTests {
assertThat(connectionString.getDatabase()).isEqualTo("test");
}
@Test
void protocolCanBeConfigured() {
this.properties.setProtocol("mongodb+srv");
ConnectionString connectionString = this.connectionDetails.getConnectionString();
assertThat(connectionString.getConnectionString()).startsWith("mongodb+srv://");
}
@Test
void authenticationDatabaseCanBeConfigured() {
this.properties.setUsername("user");

Loading…
Cancel
Save