как проверить из драйвера, работает ли сервер mongoDB
интересно, есть ли способ проверить, работает ли сервер mongoDB с драйвером java для mongoDB?
Согласно учебнику, я могу сделать
Mongo m = new Mongo();
// or
Mongo m = new Mongo( "localhost" , 27017 );
// and
DB db = m.getDB( "mydb" );
но как проверить, что я могу использовать эти Mongo и DB? Я не вижу метода isConnected () в API.
db.getConnector().isOpen()
возвращает true
единственный способ, который я нашел, - это вызов db.getDatabaseNames () и поймать исключение MongoException.
Если есть какой-то более цивилизованный подход?
5 ответов
если есть способ проверить, работает ли сервер mongoDB из драйвера java для mongoDB?
так что если вы можете сделать следующее:
Mongo m = new Mongo( "localhost" , 27017 );
DB db = m.getDB( "mydb" );
затем вы подключены к базе данных, в противном случае это m.getDB()
будет выдавать исключение. Если вы можете подключиться к базе данных, то сервер MongoDB запущен.
единственный способ, который я нашел, - это вызов db.getDatabaseNames () и поймать исключение MongoException. Если есть некоторые более цивилизованный подход?
есть ли что-то конкретно не так с этим подходом?
водитель, в основном работает в песочнице, где он может или не может подключиться. Вы просите водителя узнать что-то конкретное о сервере (выполняется ли процесс X?), но это не работа водителя. Он может подключаться или не может, он не отвечает за работу службы/процесса, просто за подключение к нему.
знать, что процесс фактически запущен, вам нужны административные функции на этом сервере, которые позволяют вам проверить это mongod
действительно работает с правильными параметрами.
вы можете запустить пинг команда
Mongo mongo = new Mongo();
DBObject ping = new BasicDBObject("ping", "1");
try {
mongo.getDB("dbname").command(ping);
} catch (MongoException e) {
...
}
Я нашел это более прямым, чем команда ping:
Mongo mongo = new Mongo();
try {
mongo.getConnector().getDBPortPool(mongo.getAddress()).get().ensureOpen();
} catch (Exception e) {
...
}
public boolean keepAlive(Mongo mongo) {
return mongo.getAddress() != null;
}
это вернет null для адреса, если mongo не работает. Вы можете посмотреть в рамках реализации getAddress() чтобы понять, почему это хороший способ проверить статус монго.
Я предполагаю, что вы инициализировали монго
Я не тестировал это тщательно (ТОЛЬКО используя 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, поэтому используйте на свой страх и риск.