16

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

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

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をキャッチすることです。

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

4

5 に答える 5

21

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

 Mongo mongo = new Mongo();
 DBObject ping = new BasicDBObject("ping", "1");
 try {
       mongo.getDB("dbname").command(ping);
 } catch (MongoException e) {
       ...
 }
于 2013-05-29T20:33:43.770 に答える
12

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

Mongo mongo = new Mongo();
try {
  mongo.getConnector().getDBPortPool(mongo.getAddress()).get().ensureOpen();
} catch (Exception e) {
  ...
}
于 2013-07-16T01:28:16.877 に答える
11

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

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

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

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

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

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

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

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

于 2011-07-26T19:56:20.863 に答える
3
public boolean keepAlive(Mongo mongo) {
    return mongo.getAddress() != null;
}

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

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

于 2013-11-18T11:08:52.293 に答える
1

私はこれを徹底的にテストしていません(ローカルホスト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を正確に使用しているわけではないため、自己責任で使用してください。

于 2012-04-05T13:58:12.873 に答える