web-dev-qa-db-ja.com

mongoDBサーバーが実行されている場合、ドライバーから確認する方法

MongoDBサーバーがJava mongoDBのドライバー)から実行されているかどうかを確認する方法があるのだろうか?

チュートリアルによると、私はできる

Mongo m = new Mongo();
// or
Mongo m = new Mongo( "localhost" , 27017 );
// and
DB db = m.getDB( "mydb" );

しかし、これらのMongoとDBを使用できることを確認するにはどうすればよいですか? APIにisConnected()メソッドがありません。

db.getConnector().isOpen() 

trueを返します

私が見つけた唯一の方法は、db.getDatabaseNames()を呼び出してMongoExceptionをキャッチすることです。

もっと文明的なアプローチがあれば?

16
zmila

mongoDBサーバーがJava MongoDBのドライバーから実行されているかどうかを確認する方法がある場合は?

したがって、次のことができる場合:

_Mongo m = new Mongo( "localhost" , 27017 );
DB db = m.getDB( "mydb" );
_

次に、データベースに接続します。そうしないと、m.getDB()が例外をスローします。データベースに接続できる場合は、MongoDBサーバーが実行されています

私が見つけた唯一の方法は、db.getDatabaseNames()を呼び出してMongoExceptionをキャッチすることです。もっと文明的なアプローチがあれば?

このアプローチに特に問題がありますか?

ドライバーは基本的に、接続できるサンドボックスまたは接続できないサンドボックスで実行されます。サーバーに固有のことをドライバーに知ってもらうように求めていますが(プロセスXは実行されていますか?)、それはドライバーの仕事ではありません。接続できるかできないかのどちらかです。サービス/プロセスの操作については責任を負わず、接続するだけです。

プロセスが実際に実行されていることを知るには、mongodが実際に正しいパラメーターで実行されていることを確認できるサーバー上の管理機能が必要です。

11
Gates VP

ping コマンドを実行できます

 Mongo mongo = new Mongo();
 DBObject ping = new BasicDBObject("ping", "1");
 try {
       mongo.getDB("dbname").command(ping);
 } catch (MongoException e) {
       ...
 }
20

これは、pingコマンドよりも直接的なものであることがわかりました。

Mongo mongo = new Mongo();
try {
  mongo.getConnector().getDBPortPool(mongo.getAddress()).get().ensureOpen();
} catch (Exception e) {
  ...
}
12
Ted M. Young
public boolean keepAlive(Mongo mongo) {
    return mongo.getAddress() != null;
}

Mongoがダウンしている場合、これはアドレスに対してnullを返します。 getAddress()の実装内を調べて、モンゴのステータスを確認するのに適した方法である理由を確認できます。

mongoパラメータを正しく初期化したと思います。

3
amazia

私はこれを徹底的にテストしていませんが(localhost mongoのみを使用)、これまでのところ機能しているようです:

public boolean mongoRunningAt(String uri) {
    try {
        Mongo mongo = new Mongo(new MongoURI(uri));
        try {
            Socket socket = mongo.getMongoOptions().socketFactory.createSocket();
            socket.connect(mongo.getAddress().getSocketAddress());
            socket.close();
        } catch (IOException ex) {
            return false;
        }
        mongo.close();
        return true;
    } catch (UnknownHostException e) {
        return false;
    }
}

そして私が使用したテスト:

@Test
public void whenMongoNotAvailableAtSpecificURLThenTheLoaderKnows() {
    assertThat(mongoRunningAt("mongodb://127.0.0.1:12345"), is(false));
}

@Test
public void whenMongoAvailableAtSpecificURLThenTheLoaderKnows() {
    assertThat(mongoRunningAt("mongodb://127.0.0.1:27017"), is(true));
}

明確に定義されたパブリックAPIを正確に使用しているわけではないため、自己責任で使用してください。

1
Daniel Flower