Voglio essere in grado di rilevare se un server mongo è disponibile dal driver java allo scopo di reagire a eventi anomali come si farebbe in JDBC land ecc. Funziona tutto bene quando il server è attivo ma sto cercando di capire perché è così difficile rilevare gli errori. Ho una sensazione perché il client mongo viene eseguito in un thread diverso e non viene visualizzato da me o qualcosa del genere?driver java mongodb come si rilevano le eccezioni?
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.
}
Il risultato è
INFO: Exception in monitor thread while connecting to server localhost:27017
Con l'analisi dello stack risultante contenente alcune eccezioni diverse, che ho cercato di catturare, ma i miei blocchi catch ancora non ha fatto nulla.
com.mongodb.MongoSocketOpenException: Exception opening socket
Caused by: java.net.ConnectException: Connection refused
Sto usando il driver java MongoDB 3.0.4, la maggior parte dei messaggi che ho letto sono da un'API più anziani con hack come MongoClient.getDatabaseNames()
che getta una MongoException
se gli errori, ma questa è deprecato ora e sostituito con MongoClient.listDatabaseNames()
che doesn' Ho lo stesso errore a lanciare semantica.
C'è un modo per eseguire una query mongo dal driver java in un blocco catch try e in realtà viene rilevata l'eccezione?
@Alexander Kondaurov Puoi dare un'occhiata a questa risposta? http://stackoverflow.com/questions/40813060/how-to-catch-exception-when-creating-mongoclient-instance/40814641#40814641. Se stai cercando qualcosa di specifico, per favore aggiungi al post. – Veeram