MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Драйверът на MongoDB Java 3.0 не може да улови изключение при удостоверяване

Последните версии на приложния програмен интерфейс (API) на MongoDB java хвърлят изключения за връзка в рамките на отделна нишка за монитор на демон, поради което не можете да го хванете - програмата за изпълнение е тук във вашето проследяване на стека:com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run

За да наблюдавате MongoDB клиента за изключения, можете да добавите слушател, който ще ви позволи да действате при всякакви изключения, които могат да възникнат, и да проверявате състоянието на връзката по всяко време, когато имате нужда. Все още няма да можете да уловите тези изключения, но приложението ви поне ще бъде уведомено за тях. Едно нещо, което трябва да се отбележи, е, че може да отнеме известно време, за да се установи (или да се провали) връзката, така че ако просто се интересувате от създаване на връзка за еднократна употреба, бих препоръчал внедряване на цикъл на заспиване, който проверява дали връзката е ОК и неуспешни/изключителни състояния. Написах това решение, използвайки версия 3.3 (https://api.mongodb.com/java/3.3/ ):

public class MongoStatusListener implements ServerListener {

    private boolean available = false;

    public boolean isAvailable() {
        return available;
    }

    @Override
    public void serverOpening(ServerOpeningEvent event) {}

    @Override
    public void serverClosed(ServerClosedEvent event) {}

    @Override
    public void serverDescriptionChanged(ServerDescriptionChangedEvent event) {

        if (event.getNewDescription().isOk()) {
            available = true;
        } else if (event.getNewDescription().getException() != null) {
            //System.out.println("exception: " + event.getNewDescription().getException().getMessage());
            available = false;
        }
    }
}

public MongoClient getMongoClient(String login, String password) {

    if (mongoClient != null) {
        return mongoClient;
    }
    MongoClientOptions.Builder optionsBuilder = new MongoClientOptions.Builder();
    MongoStatusListener mongoStatusListener = new MongoStatusListener();
    optionsBuilder.addServerListener(mongoStatusListener);

    this.mongoClient = new MongoClient(asList(new ServerAddress("localhost"), new ServerAddress("localhost:27017")),
        singletonList(MongoCredential.createCredential(
        login,
        "cookbook",
        password.toCharArray())
    ), optionsBuilder.build());

    this.mongoDatabase = mongoClient.getDatabase("cookbook");
    return mongoClient;
}

public boolean isAvailable() {
    return mongoStatusListener.isAvailable();
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Как да изпълним aggregate в mongodb в laravel framework

  2. Допълнителните полета на Mongo dbref са невидими в mongoshell. Как да ги покажем?

  3. Mongodb комбинира обобщени заявки

  4. Mongodb C# групово актуализиране/замяна на подколекция

  5. Населяване на мангусти срещу гнездене на обекти