Skip to content

Commit ede9ef0

Browse files
cbullingerrustagir
andauthored
(DOCSP-29267): Mongo Client Settings page (#96)
# Pull Request Info [PR Reviewing Guidelines](https://github.com/mongodb/docs-java/blob/master/REVIEWING.md) JIRA - https://jira.mongodb.org/browse/DOCSP-29267 Staging - https://docs-mongodbcom-staging.corp.mongodb.com/kotlin/docsworker-xlarge/docsp-29267-mongo-client-settings/fundamentals/connection/mongoclientsettings/ ## Self-Review Checklist - [ ] Is this free of any warnings or errors in the RST? - [ ] Did you run a spell-check? - [ ] Did you run a grammar-check? - [ ] Are all the links working? --------- Co-authored-by: Rea Rustagi <[email protected]>
1 parent 3c4e497 commit ede9ef0

10 files changed

+362
-60
lines changed
Lines changed: 269 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,269 @@
1+
import com.mongodb.ConnectionString
2+
import com.mongodb.MongoClientSettings
3+
import com.mongodb.MongoException
4+
import com.mongodb.connection.ClusterConnectionMode
5+
import com.mongodb.kotlin.client.coroutine.MongoClient
6+
import config.getConfig
7+
import kotlinx.coroutines.runBlocking
8+
import org.bson.BsonInt64
9+
import org.bson.Document
10+
import org.junit.jupiter.api.AfterAll
11+
import org.junit.jupiter.api.Assertions
12+
import org.junit.jupiter.api.Test
13+
import java.util.concurrent.TimeUnit
14+
import kotlin.test.Ignore
15+
16+
17+
// :replace-start: {
18+
// "terms": {
19+
// "uri": "\"<your connection string>\"",
20+
// "uriString": "\"mongodb+srv:/<username>:<password>@<hostname>:<port>?connectTimeoutMS(2000)\"",
21+
// "uriAcmeString": "\"mongodb+srv://host1.acme.com\""
22+
// }
23+
// }
24+
25+
/* NOTE: These tests are not run by default because they require a MongoDB deployment
26+
with a username and password. To run these tests locally, you need to set up your .env
27+
and replace the @Ignore annotation with @Test on the tests you want to run.
28+
*/
29+
class MongoClientSettingsTest {
30+
31+
companion object {
32+
private val config = getConfig()
33+
val CONNECTION_URI_PLACEHOLDER = config.connectionUri
34+
var higherScopedClient: MongoClient? = null
35+
36+
@AfterAll
37+
@JvmStatic
38+
fun afterAll() {
39+
runBlocking {
40+
higherScopedClient?.close()
41+
}
42+
}
43+
}
44+
45+
@Ignore
46+
fun exampleConnectionString() = runBlocking {
47+
val uri = CONNECTION_URI_PLACEHOLDER
48+
// :snippet-start: example-connection-string
49+
val mongoClient = MongoClient.create(
50+
MongoClientSettings.builder()
51+
.applyConnectionString(ConnectionString(uri))
52+
.build()
53+
)
54+
// :snippet-end:
55+
lateinit var higherScopedCommandResult: Document
56+
val database = mongoClient.getDatabase("admin")
57+
try {
58+
// Send a ping to confirm a successful connection
59+
val command = Document("ping", BsonInt64(1))
60+
val commandResult = database.runCommand(command)
61+
println("Pinged your deployment. You successfully connected to MongoDB!")
62+
higherScopedCommandResult = commandResult
63+
} catch (me: MongoException) {
64+
System.err.println(me)
65+
}
66+
higherScopedClient = mongoClient
67+
Assertions.assertEquals(1.0, higherScopedCommandResult["ok"].toString().toDouble())
68+
}
69+
70+
@Ignore
71+
fun chainOrderConnectionString() = runBlocking {
72+
val uriString = CONNECTION_URI_PLACEHOLDER
73+
// :snippet-start: chain-order-connection-string
74+
val mongoClient = MongoClient.create(
75+
MongoClientSettings.builder()
76+
.applyConnectionString(ConnectionString(uriString))
77+
.applyToSocketSettings{ builder ->
78+
builder.connectTimeout(5, TimeUnit.SECONDS)
79+
}
80+
.build()
81+
)
82+
// :snippet-end:
83+
lateinit var higherScopedCommandResult: Document
84+
val database = mongoClient.getDatabase("admin")
85+
try {
86+
// Send a ping to confirm a successful connection
87+
val command = Document("ping", BsonInt64(1))
88+
val commandResult = database.runCommand(command)
89+
println("Pinged your deployment. You successfully connected to MongoDB!")
90+
higherScopedCommandResult = commandResult
91+
} catch (me: MongoException) {
92+
System.err.println(me)
93+
}
94+
higherScopedClient = mongoClient
95+
Assertions.assertEquals(1.0, higherScopedCommandResult["ok"].toString().toDouble())
96+
}
97+
98+
@Ignore
99+
fun srvHostString() = runBlocking {
100+
val uriAcmeString = CONNECTION_URI_PLACEHOLDER
101+
// :snippet-start: srv-host-connection-string
102+
val mongoClient = MongoClient.create(
103+
MongoClientSettings.builder()
104+
.applyConnectionString(ConnectionString(uriAcmeString))
105+
.build()
106+
)
107+
// :snippet-end:
108+
lateinit var higherScopedCommandResult: Document
109+
val database = mongoClient.getDatabase("admin")
110+
try {
111+
// Send a ping to confirm a successful connection
112+
val command = Document("ping", BsonInt64(1))
113+
val commandResult = database.runCommand(command)
114+
println("Pinged your deployment. You successfully connected to MongoDB!")
115+
higherScopedCommandResult = commandResult
116+
} catch (me: MongoException) {
117+
System.err.println(me)
118+
}
119+
higherScopedClient = mongoClient
120+
Assertions.assertEquals(1.0, higherScopedCommandResult["ok"].toString().toDouble())
121+
}
122+
123+
@Ignore
124+
fun exampleClusterSettingsString() = runBlocking {
125+
// :snippet-start: cluster-settings-connection-string
126+
val mongoClient = MongoClient.create(
127+
MongoClientSettings.builder()
128+
.applyToClusterSettings{ builder ->
129+
builder.mode(ClusterConnectionMode.SINGLE)
130+
}
131+
.build()
132+
)
133+
// :snippet-end:
134+
lateinit var higherScopedCommandResult: Document
135+
val database = mongoClient.getDatabase("admin")
136+
try {
137+
// Send a ping to confirm a successful connection
138+
val command = Document("ping", BsonInt64(1))
139+
val commandResult = database.runCommand(command)
140+
println("Pinged your deployment. You successfully connected to MongoDB!")
141+
higherScopedCommandResult = commandResult
142+
} catch (me: MongoException) {
143+
System.err.println(me)
144+
}
145+
higherScopedClient = mongoClient
146+
Assertions.assertEquals(1.0, higherScopedCommandResult["ok"].toString().toDouble())
147+
}
148+
149+
@Ignore
150+
fun exampleSocketSettingsString() = runBlocking {
151+
val uri = CONNECTION_URI_PLACEHOLDER
152+
// :snippet-start: socket-settings-connection-string
153+
val mongoClient = MongoClient.create(
154+
MongoClientSettings.builder()
155+
.applyConnectionString(ConnectionString(uri))
156+
.applyToSocketSettings{ builder ->
157+
builder
158+
.connectTimeout(10, TimeUnit.SECONDS)
159+
.readTimeout(15, TimeUnit.SECONDS)
160+
}
161+
.build()
162+
)
163+
// :snippet-end:
164+
lateinit var higherScopedCommandResult: Document
165+
val database = mongoClient.getDatabase("admin")
166+
try {
167+
// Send a ping to confirm a successful connection
168+
val command = Document("ping", BsonInt64(1))
169+
val commandResult = database.runCommand(command)
170+
println("Pinged your deployment. You successfully connected to MongoDB!")
171+
higherScopedCommandResult = commandResult
172+
} catch (me: MongoException) {
173+
System.err.println(me)
174+
}
175+
higherScopedClient = mongoClient
176+
Assertions.assertEquals(1.0, higherScopedCommandResult["ok"].toString().toDouble())
177+
}
178+
179+
@Ignore
180+
fun connectionPoolSettingsString() = runBlocking {
181+
val uri = CONNECTION_URI_PLACEHOLDER
182+
// :snippet-start: connection-pool-connection-string
183+
val mongoClient = MongoClient.create(
184+
MongoClientSettings.builder()
185+
.applyConnectionString(ConnectionString(uri))
186+
.applyToConnectionPoolSettings{ builder ->
187+
builder
188+
.maxWaitTime(10, TimeUnit.SECONDS)
189+
.maxSize(200)
190+
}
191+
.build()
192+
)
193+
// :snippet-end:
194+
lateinit var higherScopedCommandResult: Document
195+
val database = mongoClient.getDatabase("admin")
196+
try {
197+
// Send a ping to confirm a successful connection
198+
val command = Document("ping", BsonInt64(1))
199+
val commandResult = database.runCommand(command)
200+
println("Pinged your deployment. You successfully connected to MongoDB!")
201+
higherScopedCommandResult = commandResult
202+
} catch (me: MongoException) {
203+
System.err.println(me)
204+
}
205+
higherScopedClient = mongoClient
206+
Assertions.assertEquals(1.0, higherScopedCommandResult["ok"].toString().toDouble())
207+
}
208+
209+
@Ignore
210+
fun serverSettingsString() = runBlocking {
211+
val uri = CONNECTION_URI_PLACEHOLDER
212+
// :snippet-start: server-settings-connection-string
213+
val mongoClient = MongoClient.create(
214+
MongoClientSettings.builder()
215+
.applyConnectionString(ConnectionString(uri))
216+
.applyToServerSettings{ builder ->
217+
builder
218+
.minHeartbeatFrequency(700, TimeUnit.MILLISECONDS)
219+
.heartbeatFrequency(15, TimeUnit.SECONDS)
220+
}
221+
.build()
222+
)
223+
// :snippet-end:
224+
lateinit var higherScopedCommandResult: Document
225+
val database = mongoClient.getDatabase("admin")
226+
try {
227+
// Send a ping to confirm a successful connection
228+
val command = Document("ping", BsonInt64(1))
229+
val commandResult = database.runCommand(command)
230+
println("Pinged your deployment. You successfully connected to MongoDB!")
231+
higherScopedCommandResult = commandResult
232+
} catch (me: MongoException) {
233+
System.err.println(me)
234+
}
235+
higherScopedClient = mongoClient
236+
Assertions.assertEquals(1.0, higherScopedCommandResult["ok"].toString().toDouble())
237+
}
238+
239+
@Ignore
240+
fun tlsSslString() = runBlocking {
241+
val uri = CONNECTION_URI_PLACEHOLDER
242+
// :snippet-start: tls-ssl-connection-string
243+
val mongoClient = MongoClient.create(
244+
MongoClientSettings.builder()
245+
.applyConnectionString(ConnectionString(uri))
246+
.applyToSslSettings{ builder ->
247+
builder.enabled(true)
248+
}
249+
.build()
250+
)
251+
// :snippet-end:
252+
lateinit var higherScopedCommandResult: Document
253+
val database = mongoClient.getDatabase("admin")
254+
try {
255+
// Send a ping to confirm a successful connection
256+
val command = Document("ping", BsonInt64(1))
257+
val commandResult = database.runCommand(command)
258+
println("Pinged your deployment. You successfully connected to MongoDB!")
259+
higherScopedCommandResult = commandResult
260+
} catch (me: MongoException) {
261+
System.err.println(me)
262+
}
263+
higherScopedClient = mongoClient
264+
Assertions.assertEquals(1.0, higherScopedCommandResult["ok"].toString().toDouble())
265+
}
266+
267+
}
268+
269+
// :replace-end:
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
val mongoClient = MongoClient.create(
2+
MongoClientSettings.builder()
3+
.applyConnectionString(ConnectionString("mongodb+srv:/<username>:<password>@<hostname>:<port>?connectTimeoutMS(2000)"))
4+
.applyToSocketSettings{ builder ->
5+
builder.connectTimeout(5, TimeUnit.SECONDS)
6+
}
7+
.build()
8+
)
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
val mongoClient = MongoClient.create(
2+
MongoClientSettings.builder()
3+
.applyToClusterSettings{ builder ->
4+
builder.mode(ClusterConnectionMode.SINGLE)
5+
}
6+
.build()
7+
)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
val mongoClient = MongoClient.create(
2+
MongoClientSettings.builder()
3+
.applyConnectionString(ConnectionString("<your connection string>"))
4+
.applyToConnectionPoolSettings{ builder ->
5+
builder
6+
.maxWaitTime(10, TimeUnit.SECONDS)
7+
.maxSize(200)
8+
}
9+
.build()
10+
)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
val mongoClient = MongoClient.create(
2+
MongoClientSettings.builder()
3+
.applyConnectionString(ConnectionString("<your connection string>"))
4+
.build()
5+
)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
val mongoClient = MongoClient.create(
2+
MongoClientSettings.builder()
3+
.applyConnectionString(ConnectionString("<your connection string>"))
4+
.applyToServerSettings{ builder ->
5+
builder
6+
.minHeartbeatFrequency(700, TimeUnit.MILLISECONDS)
7+
.heartbeatFrequency(15, TimeUnit.SECONDS)
8+
}
9+
.build()
10+
)
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
val mongoClient = MongoClient.create(
2+
MongoClientSettings.builder()
3+
.applyConnectionString(ConnectionString("<your connection string>"))
4+
.applyToSocketSettings{ builder ->
5+
builder
6+
.connectTimeout(10, TimeUnit.SECONDS)
7+
.readTimeout(15, TimeUnit.SECONDS)
8+
}
9+
.build()
10+
)
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
val mongoClient = MongoClient.create(
2+
MongoClientSettings.builder()
3+
.applyConnectionString(ConnectionString("mongodb+srv://host1.acme.com"))
4+
.build()
5+
)
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
val mongoClient = MongoClient.create(
2+
MongoClientSettings.builder()
3+
.applyConnectionString(ConnectionString("<your connection string>"))
4+
.applyToSslSettings{ builder ->
5+
builder.enabled(true)
6+
}
7+
.build()
8+
)

0 commit comments

Comments
 (0)