Docs Menu
Docs Home
/ / /
Java Reactive Streams ドライバー
/

MongoDB に接続する

項目一覧

  • 前提条件
  • MongoClient
  • スタンドアロンの 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の 1 つだけです。

重要

通常、スタンドアロン配置、レプリカセット、シャーディングされたクラスターなどの特定の MongoDB 配置に対してMongoClientインスタンスを 1 つだけ作成し、アプリケーション全体でクライアントを使用します。 ただし、 インスタンスを複数作成する場合は、次の点に注意してください。

  • すべてのリソース使用量の制限(最大接続数など)は各MongoClientインスタンスに適用されます。

  • インスタンスを破棄するには、 MongoClient.close()メソッドを呼び出してリソースをクリーンアップします。

次の例は、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());
  • hostnameportを明示的に指定します。

    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" );
  • mongoslocalhost: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);

戻る

Tutorials