Ich möchte in der Lage zu erkennen, ob ein Mongo-Server von dem Java-Treiber für den Zweck der Reaktion auf abnormale Ereignisse wie in JDBC Land usw. verfügbar ist. Alles funktioniert gut, wenn der Server auf, aber ich habe zu kämpfen zu verstehen, warum es so schwierig ist, Fehler zu erkennen. Ich habe ein Gefühl, weil der Mongo-Client in einem anderen Thread läuft und es mir nicht oder etwas zuwirft?java mongodb Treiber Wie fangen Sie Ausnahmen?
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.
}
Das Ergebnis ist
INFO: Exception in monitor thread while connecting to server localhost:27017
Mit dem resultierenden Stack-Trace ein paar verschiedene Ausnahmen enthält, die ich versucht habe, zu fangen, aber meine Catch-Blöcke immer noch nicht alles tun.
com.mongodb.MongoSocketOpenException: Exception opening socket
Caused by: java.net.ConnectException: Connection refused
Ich bin mit dem Java-mongodb Treiber 3.0.4, die meisten Beiträge, die ich sind von einer älteren API mit Hacks wie MongoClient.getDatabaseNames()
lesen, die eine MongoException
wenn Fehler wirft, außer dies jetzt veraltet ist und mit MongoClient.listDatabaseNames()
ersetzt, die ‚doesn t haben den gleichen Fehler Semantik zu werfen.
Gibt es eine Möglichkeit, einfach eine Mongo-Abfrage vom Java-Treiber in einem try catch-Block auszuführen und die Ausnahme tatsächlich gefangen zu bekommen?
@AlexanderKondaurov Können Sie sich diese Antwort ansehen? http://stackoverflow.com/questions/40813060/how-to-catch-exception-when-creating-mongoclient-instance/40814641#40814641. Wenn Sie etwas Bestimmtes suchen, fügen Sie bitte dem Beitrag hinzu. – Veeram