如何从驱动程序检查mongoDB服务器是否正在运行

zmi*_*ila 16 java mongodb mongo-java

我想知道,如果有办法检查mongoDB服务器是否从mongoDB的java驱动程序运行?

根据教程,我可以做到

Mongo m = new Mongo();
// or
Mongo m = new Mongo( "localhost" , 27017 );
// and
DB db = m.getDB( "mydb" );
Run Code Online (Sandbox Code Playgroud)

但是如何检查我可以使用这些Mongo和DB?我在API中看不到isConnected()方法.

db.getConnector().isOpen() 
Run Code Online (Sandbox Code Playgroud)

返回true

我找到的唯一方法是调用db.getDatabaseNames()并捕获MongoException.

如果有一些更文明的方法?

Ben*_*out 20

您可以运行ping命令

 Mongo mongo = new Mongo();
 DBObject ping = new BasicDBObject("ping", "1");
 try {
       mongo.getDB("dbname").command(ping);
 } catch (MongoException e) {
       ...
 }
Run Code Online (Sandbox Code Playgroud)


Ted*_*ung 12

我发现这比ping命令更直接:

Mongo mongo = new Mongo();
try {
  mongo.getConnector().getDBPortPool(mongo.getAddress()).get().ensureOpen();
} catch (Exception e) {
  ...
}
Run Code Online (Sandbox Code Playgroud)

  • 由`getConnector()`返回的类DBTCPConnector在v2.6中已弃用,并在Mongo v3.0中被删除. (3认同)

Gat*_* VP 11

如果有办法检查mongoDB服务器是否从MongoDB的java驱动程序运行?

所以如果你能做到以下几点:

Mongo m = new Mongo( "localhost" , 27017 );
DB db = m.getDB( "mydb" );
Run Code Online (Sandbox Code Playgroud)

然后你连接到数据库,否则m.getDB()会抛出异常.如果可以连接到数据库,则MongoDB服务器正在运行.

我找到的唯一方法是调用db.getDatabaseNames()并捕获MongoException.如果有一些更文明的方法?

这种方法有什么特别的错误吗?

驱动程序基本上在沙箱中运行,它可以连接或不连接.您是要求驱动程序知道有关服务器的具体信息(进程X正在运行吗?),但这不是驱动程序的工作.它可以连接也可以不连接,它不负责操作服务/进程,只是为了连接它.

要知道该进程实际上正在运行,您需要在该服务器上使用管理功能,以便检查mongod确实正在使用正确的参数运行.

  • 也许这个问题已经过时了,因为在我当前的mongo版本(2.7.3)上我可以调用mongo.getDB("anynameatall")并且它不会抛出异常,即使"连接"到没有的URL也没有Mongo正在运行(例如"mongodb://127.0.0.1:12345").我也陷入了不文明的getDatabaseNames()检查. (10认同)
  • 这种方法不再适用.必须这样做:Mongo mongo = new MongoClient("localhost",27017); DB test = mongo.getDB("test"); DBCollection coll = test.getCollection("test"); coll.findOne(); (3认同)