sql >> Database >  >> NoSQL >> MongoDB

MongoDB java-stuurprogramma 3.0 kan geen uitzondering opvangen bij authenticatie

Recente versies van de MongoDB Java API gooien verbindingsuitzonderingen in een aparte daemon-monitorthread, daarom kun je het niet vangen - de runner is hier in je stacktracering:com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run

Om de MongoDB-client op uitzonderingen te controleren, kunt u een listener toevoegen waarmee u op eventuele uitzonderingen kunt reageren en de verbindingsstatus kunt controleren wanneer u maar wilt. U kunt deze uitzonderingen nog steeds niet opvangen, maar uw aanvraag wordt er in ieder geval van op de hoogte gebracht. Een ding om op te merken is dat het enige tijd kan duren voordat de verbinding tot stand is gebracht (of mislukt), dus als je alleen geïnteresseerd bent in het maken van een eenmalige verbinding, raad ik aan om een ​​slaaplus te implementeren die controleert op de verbinding OK en mislukte/uitzonderingsstatussen. Ik heb deze oplossing geschreven met versie 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. E11000 dubbele sleutelfoutindex in mongodb mangoest

  2. Voordelen van MongoDB | Nadelen van MongoDB

  3. WiredTiger en interne updates

  4. Hoe SQLdecode-fout op te lossen wanneer u modellen in django migreert?