- Reactive Streams
- Tutorials
- Connect to MongoDB
Connect to MongoDB
Use MongoClients.create()
to make a connection to a running MongoDB instance.
important
The following examples are not meant to provide an exhaustive list
of ways to instantiate MongoClient
. For a complete list of MongoClients factory methods, see the
MongoClients API documentation
.
Note
It is strongly recommended that system keep-alive settings should be configured with shorter timeouts.
See the ‘does TCP keep-alive time affect MongoDB deployments?’ documentation for more information.
Prerequisites
Running MongoDB deployments to which to connect. For example, to connect to a standalone, you must have a running standalone.
The MongoDB Driver. See Installation for instructions on how to install the MongoDB driver.
The following import statements:
import com.mongodb.reactivestreams.client.MongoClients;
import com.mongodb.reactivestreams.client.MongoClient;
import com.mongodb.MongoClientSettings;
import com.mongodb.ConnectionString;
import com.mongodb.ServerAddress;
import com.mongodb.MongoCredential;
import java.util.Arrays;
MongoClient
A MongoClient
instance represents a pool of connections
to the database; you will only need one instance of class MongoClient
even with multiple concurrent operations.
important
Typically you only create one MongoClient
instance for a given MongoDB deployment (e.g. standalone, replica set, or a sharded cluster)
and use it across your application. However, if you do create multiple instances:
All resource usage limits (e.g. max connections, etc.) apply per
MongoClient
instance.To dispose of an instance, call
MongoClient.close()
to clean up resources.
Connect to a Standalone MongoDB Instance
To connect to a standalone MongoDB instance:
- You can create a
MongoClient
object without any parameters to connect to a MongoDB instance running on localhost on port27017
:
MongoClient mongoClient = MongoClients.create()
- You can explicitly specify the hostname to connect to a MongoDB
instance running on the specified host on port
27017
:
MongoClient mongoClient = MongoClients.create("mongodb://host1");
You can explicitly specify the hostname and the port:
MongoClient mongoClient = MongoClients.create("mongodb://host1:27017");
Connect to a Replica Set
To connect to a replica set, you must specify one or more members to the MongoClients
create method.
Note
MongoDB will auto-discover the primary and the secondaries.
You can specify the members using a
ConnectionString
:- To specify at least two members of the replica set:
MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017,host3:27017");
- With at least one member of the replica set and the
replicaSet
option specifying the replica set name:
MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myReplicaSet");
- You can specify a list of the all the replica set members’
ServerAddress
:
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(
new ServerAddress("host1", 27017),
new ServerAddress("host2", 27017),
new ServerAddress("host3", 27017))))
.build());
Connect to a Sharded Cluster
To connect to a sharded cluster, specify the mongos
instance
or instances to a MongoClients
create method.
To connect to a single mongos
instance:
- You can specify the hostname and the port in a
ConnectionString
MongoClient mongoClient = MongoClients.create( "mongodb://localhost:27017" );
or leave the connection string out if the mongos
is running on localhost:27017:
MongoClient mongoClient = MongoClients.create();
To connect to multiple mongos
instances:
You can specify the
ConnectionString
with their hostnames and ports:MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017");
You can specify a list of the
mongos
instances’ServerAddress
:
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(
new ServerAddress("host1", 27017),
new ServerAddress("host2", 27017))))
.build());
Connection Options
You can specify the connection settings using either the
ConnectionString
or MongoClientSettings
or both.
For example, you can specify TLS/SSL and authentication setting in the connection string:
MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&ssl=true");
You can also use MongoClientSettings
to specify TLS/SSL and the MongoCredential
for the authentication information:
String user; // the user name
String database; // the name of the database in which the user is defined
char[] password; // the password as a character array
// ...
MongoCredential credential = MongoCredential.createCredential(user, database, password);
MongoClientSettings settings = MongoClientSettings.builder()
.credential(credential)
.applyToSslSettings(builder -> builder.enabled(true))
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("host1", 27017))))
.build();
MongoClient mongoClient = MongoClients.create(settings);
Finally, in some cases you may need to combine a connection string with programmatic configuration:
ConnectionString connectionString = new ConnectionString("mongodb://host1:27107,host2:27017/?ssl=true");
CommandListener myCommandListener = ...;
MongoClientSettings settings = MongoClientSettings.builder()
.addCommandListener(myCommandListener)
.applyConnectionString(connectionString)
.build();
MongoClient mongoClient = MongoClients.create(settings);