sql >> Databáze >  >> NoSQL >> MongoDB

MongoDB java driver 3.0 nemůže zachytit výjimku při ověřování

Nejnovější verze MongoDB java API vyvolávají výjimky připojení v rámci samostatného vlákna monitoru démona, což je důvod, proč to nemůžete zachytit - běžec je zde ve vašem trasování zásobníku:com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run

Chcete-li monitorovat výjimky v klientovi MongoDB, můžete přidat posluchač, který vám umožní reagovat na jakékoli výjimky, které se mohou vyskytnout, a zkontrolovat stav připojení, kdykoli budete potřebovat. Tyto výjimky stále nezachytíte, ale vaše aplikace o nich bude alespoň informována. Jedna věc, kterou je třeba poznamenat, může nějakou dobu trvat, než se připojení vytvoří (nebo selže), takže pokud máte zájem o vytvoření jednorázového připojení, doporučuji implementovat spánkovou smyčku, která zkontroluje, zda je připojení v pořádku. a neúspěšné/výjimečné stavy. Toto řešení jsem napsal pomocí verze 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. Aktualizace a vyhledávání struktury vložení Mongodb?

  2. Lua skript a redis - jak testovat hodnotu None

  3. Jak zjistím čas, kdy je můj klíč uložen v Redis Cache/db?

  4. Node + Mongoose:Získat poslední vložené ID?