diff --git a/pom.xml b/pom.xml
index 6b34445..2861fbc 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
com.kapeta
nosql-mongodb
- 1.1.3
+ 1.2.0
${project.groupId}:${project.artifactId}
MongoDB support for Kapeta Spring Boot SDK
diff --git a/src/main/java/com/kapeta/spring/mongo/AbstractMongoDBConfig.java b/src/main/java/com/kapeta/spring/mongo/AbstractMongoDBConfig.java
index 002f2f5..4b3f506 100644
--- a/src/main/java/com/kapeta/spring/mongo/AbstractMongoDBConfig.java
+++ b/src/main/java/com/kapeta/spring/mongo/AbstractMongoDBConfig.java
@@ -28,6 +28,9 @@
import org.springframework.lang.NonNull;
import java.util.Arrays;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.stream.Collectors;
/**
* Mongo configuration class.
@@ -39,6 +42,8 @@ abstract public class AbstractMongoDBConfig {
private static final String PORT_TYPE = "mongodb";
+ private static final String[] SUPPORTED_MONGO_OPTIONS = { "maxIdleTimeMS", "ssl"};
+
@Autowired
private KapetaConfigurationProvider configurationProvider;
@@ -91,18 +96,26 @@ protected MongoProperties createMongoUriProperties(String databaseName, String d
String username = mongoInfo.getCredentials().get("username");
String password = mongoInfo.getCredentials().getOrDefault("password","");
- String ssl = "ssl=false";
- if(mongoInfo.getOptions().containsKey("ssl")) {
- if (Boolean.parseBoolean(mongoInfo.getOptions().get("ssl").toString())) {
- ssl = "ssl=true";
+ Map options = new HashMap<>();
+ for (String option : SUPPORTED_MONGO_OPTIONS) {
+ if (mongoInfo.getOptions().containsKey(option)) {
+ options.put(option, mongoInfo.getOptions().get(option).toString());
}
}
- String dbAuthDBStr = String.format("&authSource=%s", dbAuthDB);
- if (StringUtils.isEmpty(dbAuthDB)) {
- dbAuthDBStr = "";
+
+ if (!StringUtils.isBlank(dbAuthDB)) {
+ options.put("authSource", dbAuthDB);
+ }
+
+ String formattedOptions = options.entrySet().stream()
+ .map(e -> e.getKey() + "=" + e.getValue())
+ .collect(Collectors.joining("&"));
+
+ if (!StringUtils.isBlank(formattedOptions)) {
+ formattedOptions = "?" + formattedOptions;
}
- String uri = String.format("mongodb+srv://%s:%s@%s/%s?%s%s", username, password, mongoInfo.getHost(), databaseName,ssl, dbAuthDBStr);
+ String uri = String.format("mongodb+srv://%s:%s@%s/%s%s", username, password, mongoInfo.getHost(), databaseName, formattedOptions);
MongoProperties properties = new MongoProperties();
properties.setUri(uri);
diff --git a/src/test/java/com/kapeta/spring/mongo/AbstractMongoDBConfigTest.java b/src/test/java/com/kapeta/spring/mongo/AbstractMongoDBConfigTest.java
index 7a9ff45..b362455 100644
--- a/src/test/java/com/kapeta/spring/mongo/AbstractMongoDBConfigTest.java
+++ b/src/test/java/com/kapeta/spring/mongo/AbstractMongoDBConfigTest.java
@@ -4,12 +4,10 @@
*/
package com.kapeta.spring.mongo;
-import com.kapeta.spring.config.providers.TestConfigProvider;
import com.kapeta.spring.config.providers.types.ResourceInfo;
import org.junit.jupiter.api.Test;
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
-
import java.util.HashMap;
import java.util.Map;
@@ -36,7 +34,7 @@ public void testCreateMongoUriProperties() {
MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "admin", resourceInfo);
- assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=true&authSource=admin", properties.getUri());
+ assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?authSource=admin&ssl=true", properties.getUri());
}
@@ -58,7 +56,7 @@ public void testSSLFalse() {
MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "admin", resourceInfo);
- assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=false&authSource=admin", properties.getUri());
+ assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?authSource=admin&ssl=false", properties.getUri());
}
@Test
@@ -78,7 +76,7 @@ public void testEmptySSLConfig() {
MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "admin", resourceInfo);
- assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=false&authSource=admin", properties.getUri());
+ assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?authSource=admin", properties.getUri());
}
@Test
@@ -102,6 +100,28 @@ public void testEmptyAuthSource() {
assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=true", properties.getUri());
}
+ @Test
+ public void testMoreParameters() {
+ Map credentials = new HashMap<>();
+ credentials.put("username", "testUser");
+ credentials.put("password", "testPass");
+
+ Map options = new HashMap<>();
+ options.put("ssl", "true");
+ options.put("maxIdleTimeMS", "120000");
+
+ TestMongoDBConfig mongoDBConfig = new TestMongoDBConfig("testResource");
+
+ ResourceInfo resourceInfo = new ResourceInfo();
+ resourceInfo.setCredentials(credentials);
+ resourceInfo.setOptions(options);
+ resourceInfo.setHost("testHost");
+
+ MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "", resourceInfo);
+
+ assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?maxIdleTimeMS=120000&ssl=true", properties.getUri());
+ }
+
private class TestMongoDBConfig extends AbstractMongoDBConfig {
public TestMongoDBConfig(String resourceName) {
super(resourceName);