Skip to content

Commit ebb3243

Browse files
committed
Support maxIdleTimeMS parameter
1 parent 1f36843 commit ebb3243

File tree

3 files changed

+47
-14
lines changed

3 files changed

+47
-14
lines changed

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>com.kapeta</groupId>
88
<artifactId>nosql-mongodb</artifactId>
9-
<version>1.1.3</version>
9+
<version>1.2.0</version>
1010

1111
<name>${project.groupId}:${project.artifactId}</name>
1212
<description>MongoDB support for Kapeta Spring Boot SDK</description>

src/main/java/com/kapeta/spring/mongo/AbstractMongoDBConfig.java

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@
2828
import org.springframework.lang.NonNull;
2929

3030
import java.util.Arrays;
31+
import java.util.HashMap;
32+
import java.util.Map;
33+
import java.util.stream.Collectors;
3134

3235
/**
3336
* Mongo configuration class.
@@ -39,6 +42,8 @@ abstract public class AbstractMongoDBConfig {
3942

4043
private static final String PORT_TYPE = "mongodb";
4144

45+
private static final String[] SUPPORTED_MONGO_OPTIONS = { "maxIdleTimeMS", "ssl"};
46+
4247
@Autowired
4348
private KapetaConfigurationProvider configurationProvider;
4449

@@ -91,18 +96,26 @@ protected MongoProperties createMongoUriProperties(String databaseName, String d
9196
String username = mongoInfo.getCredentials().get("username");
9297
String password = mongoInfo.getCredentials().getOrDefault("password","");
9398

94-
String ssl = "ssl=false";
95-
if(mongoInfo.getOptions().containsKey("ssl")) {
96-
if (Boolean.parseBoolean(mongoInfo.getOptions().get("ssl").toString())) {
97-
ssl = "ssl=true";
99+
Map<String, String> options = new HashMap<>();
100+
for (String option : SUPPORTED_MONGO_OPTIONS) {
101+
if (mongoInfo.getOptions().containsKey(option)) {
102+
options.put(option, mongoInfo.getOptions().get(option).toString());
98103
}
99104
}
100-
String dbAuthDBStr = String.format("&authSource=%s", dbAuthDB);
101-
if (StringUtils.isEmpty(dbAuthDB)) {
102-
dbAuthDBStr = "";
105+
106+
if (!StringUtils.isBlank(dbAuthDB)) {
107+
options.put("authSource", dbAuthDB);
108+
}
109+
110+
String formattedOptions = options.entrySet().stream()
111+
.map(e -> e.getKey() + "=" + e.getValue())
112+
.collect(Collectors.joining("&"));
113+
114+
if (!StringUtils.isBlank(formattedOptions)) {
115+
formattedOptions = "?" + formattedOptions;
103116
}
104117

105-
String uri = String.format("mongodb+srv://%s:%s@%s/%s?%s%s", username, password, mongoInfo.getHost(), databaseName,ssl, dbAuthDBStr);
118+
String uri = String.format("mongodb+srv://%s:%s@%s/%s%s", username, password, mongoInfo.getHost(), databaseName, formattedOptions);
106119

107120
MongoProperties properties = new MongoProperties();
108121
properties.setUri(uri);

src/test/java/com/kapeta/spring/mongo/AbstractMongoDBConfigTest.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,10 @@
44
*/
55
package com.kapeta.spring.mongo;
66

7-
import com.kapeta.spring.config.providers.TestConfigProvider;
87
import com.kapeta.spring.config.providers.types.ResourceInfo;
98
import org.junit.jupiter.api.Test;
109
import org.springframework.boot.autoconfigure.mongo.MongoProperties;
1110

12-
1311
import java.util.HashMap;
1412
import java.util.Map;
1513

@@ -36,7 +34,7 @@ public void testCreateMongoUriProperties() {
3634

3735
MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "admin", resourceInfo);
3836

39-
assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=true&authSource=admin", properties.getUri());
37+
assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?authSource=admin&ssl=true", properties.getUri());
4038
}
4139

4240

@@ -58,7 +56,7 @@ public void testSSLFalse() {
5856

5957
MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "admin", resourceInfo);
6058

61-
assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=false&authSource=admin", properties.getUri());
59+
assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?authSource=admin&ssl=false", properties.getUri());
6260
}
6361

6462
@Test
@@ -78,7 +76,7 @@ public void testEmptySSLConfig() {
7876

7977
MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "admin", resourceInfo);
8078

81-
assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=false&authSource=admin", properties.getUri());
79+
assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?authSource=admin", properties.getUri());
8280
}
8381

8482
@Test
@@ -102,6 +100,28 @@ public void testEmptyAuthSource() {
102100
assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?ssl=true", properties.getUri());
103101
}
104102

103+
@Test
104+
public void testMoreParameters() {
105+
Map<String, String> credentials = new HashMap<>();
106+
credentials.put("username", "testUser");
107+
credentials.put("password", "testPass");
108+
109+
Map<String, Object> options = new HashMap<>();
110+
options.put("ssl", "true");
111+
options.put("maxIdleTimeMS", "120000");
112+
113+
TestMongoDBConfig mongoDBConfig = new TestMongoDBConfig("testResource");
114+
115+
ResourceInfo resourceInfo = new ResourceInfo();
116+
resourceInfo.setCredentials(credentials);
117+
resourceInfo.setOptions(options);
118+
resourceInfo.setHost("testHost");
119+
120+
MongoProperties properties = mongoDBConfig.createMongoUriProperties("testDB", "", resourceInfo);
121+
122+
assertEquals("mongodb+srv://testUser:testPass@testHost/testDB?maxIdleTimeMS=120000&ssl=true", properties.getUri());
123+
}
124+
105125
private class TestMongoDBConfig extends AbstractMongoDBConfig {
106126
public TestMongoDBConfig(String resourceName) {
107127
super(resourceName);

0 commit comments

Comments
 (0)