Я хочу, чтобы определить, доступен ли mongo-сервер из драйвера java для реагирования на любые аномальные события, как на земле JDBC и т.д. Все работает отлично, когда сервер работает, но я борюсь понять, почему так сложно обнаружить ошибки. У меня такое чувство, потому что клиент mongo работает в другом потоке, и он не бросает меня или что-то еще?
try {
MongoClient mongoClient = new MongoClient("localhost", 27017);
MongoDatabase db = mongoClient.getDatabase("mydb");
// if db is down or error getting people collection handle it in catch block
MongoCollection<Document> people = commentarr.getCollection("people");
} catch (Exception e) {
// handle server down or failed query here.
}
Результат
INFO: Exception in monitor thread while connecting to server localhost:27017
С полученной трассировкой стека, содержащей несколько разных исключений, которые я пытался поймать, но мои блоки catch все еще ничего не делали.
com.mongodb.MongoSocketOpenException: Exception opening socket
Caused by: java.net.ConnectException: Connection refused
Я использую драйвер java mongodb 3.0.4, большинство сообщений, которые я читаю, относятся к более старым API с такими хаками, как MongoClient.getDatabaseNames()
, который выдает ошибки MongoException
, если только это не устарело и заменено на MongoClient.listDatabaseNames()
не имеет той же семантики метаданных ошибок.
Есть ли способ просто выполнить запрос mongo из java-драйвера в блоке try catch и на самом деле исключить исключение?