MongoDB に接続する
このガイドでは、Java Reactive Streams ドライバーを使用して MongoDB に接続する方法について説明します。
実行中の MongoDB 配置に接続するには、 MongoClients.create()
メソッドを使用します。
重要
次の例では、 MongoClient
をインスタンス化する方法を網羅するものではありません。 ファクトリー MongoClient
メソッドの完全なリストについては、 MongoClients API ドキュメントを参照してください。
注意
システム キープアライブ設定は、より短いタイムアウトで構成することを強くお勧めします。
詳細は、 「 TCP キープアライブ時間が MongoDB デプロイに及ぼす影響」を参照してください。 詳細については、サーバー マニュアル FAQ の質問と回答を参照してください。
前提条件
このガイドのコード例を実行するには、次のコンポーネントを設定する必要があります。
接続する実行中の MongoDB 配置。 たとえば、スタンドアロン配置に接続するには、実行中のスタンドアロン配置への アクセス権が必要です。
プロジェクトにインストールされたドライバー依存関係。 ドライバーをインストールする方法については、「 インストール ガイド 」を参照してください。
次のインポート ステートメントは次のとおりです。
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
MongoClient
インスタンスは、データベースへの接続のプールを表します。 複数の同時操作を実行する場合でも、必要なインスタンスはMongoClient
の 1 つだけです。
重要
通常、スタンドアロン配置、レプリカセット、シャーディングされたクラスターなどの特定の MongoDB 配置に対してMongoClient
インスタンスを 1 つだけ作成し、アプリケーション全体でクライアントを使用します。 ただし、 インスタンスを複数作成する場合は、次の点に注意してください。
すべてのリソース使用量の制限(最大接続数など)は各
MongoClient
インスタンスに適用されます。インスタンスを破棄するには、
MongoClient.close()
メソッドを呼び出してリソースをクリーンアップします。
スタンドアロンの MongoDB 配置への接続
次の例は、MongoDB の単一配置に接続する方法をいくつか示しています。
次の方法で、単一の MongoDB 配置に接続できます。
ポート
27017
の localhost で実行されている MongoDB サーバーに接続するために、 パラメータなしでMongoClient
オブジェクトをインスタンス化します。MongoClient mongoClient = MongoClients.create(); ポート
27017
の指定されたホストで実行されている MongoDB インスタンスに接続するには、hostname
を明示的に指定します。MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("hostOne")))) .build()); hostname
とport
を明示的に指定します。MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("hostOne", 27018)))) .build()); ConnectionString
を指定します。MongoClient mongoClient = MongoClients.create("mongodb://hostOne:27017");
レプリカセットへの接続
レプリカセットに接続するには、 MongoClients.create()
メソッドに 1 つ以上のメンバーを指定する必要があります。 レプリカセットの詳細については、サーバー マニュアルの「レプリケーション」を参照してください。
注意
MongoDB は、レプリカセット内の プライマリ ノードと セカンダリ ノードを自動検出します。
MongoDB レプリカセットに接続するには、 ConnectionString
でノードを指定します。
次の例では、レプリカセットの 3 つのノードを指定する方法を示しています。
MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017,host3:27017");
次の例は、レプリカセットのメンバーと、レプリカセット名とともにreplicaSet
オプションを指定する方法を示しています。
MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017,host3:27017/?replicaSet=myReplicaSet");
次の例は、すべてのレプリカセット メンバーに対応する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());
シャーディングされたクラスターへの接続
シャーディングされたクラスターに接続するには、 mongos
インスタンスをMongoClients.create()
メソッドに指定します。 シャーディングされたクラスターの詳細については、サーバー マニュアルの「 シャーディング 」を参照してください。
次の方法で、単一のmongos
インスタンスに接続できます。
ConnectionString
でホスト名とポートを次のとおり指定します。MongoClient mongoClient = MongoClients.create( "mongodb://localhost:27017" ); mongos
がlocalhost:27017
で実行されている場合は、接続stringを除外します。MongoClient mongoClient = MongoClients.create();
次の方法で複数のmongos
インスタンスに接続できます。
ホスト名とポートを含めるには、
ConnectionString
を指定します。MongoClient mongoClient = MongoClients.create("mongodb://host1:27017,host2:27017"); 各 インスタンスに対応する
ServerAddress
オブジェクトのリストを指定します。MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList( new ServerAddress("host1", 27017), new ServerAddress("host2", 27017)))) .build());
接続オプション
ConnectionString
またはMongoClientSettings
のタイプ、またはその両方を使用して接続設定を指定できます。
たとえば、接続stringで TLS/SSL と認証設定を指定できます。
MongoClient mongoClient = MongoClients.create("mongodb://user1:pwd1@host1/?authSource=db1&ssl=true");
また、 MongoClientSettings
インスタンスを使用して TLS/SSL を指定し、 MongoCredential
タイプを使用して認証情報を保存することもできます。
String user; // the username 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);
場合によっては、接続stringをプログラムによる構成と組み合わせる必要がある場合があります。
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);