sql >> Database teknologi >  >> NoSQL >> MongoDB

MongoDB java driver 3.0 kan ikke fange undtagelse ved godkendelse

Nylige versioner af MongoDB java API'et kaster forbindelsesundtagelser ind i en separat dæmonmonitor-tråd, hvorfor du ikke kan fange den - løberen er her i din stack-sporing:com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run

For at overvåge MongoDB-klienten for undtagelser, kan du tilføje en lytter, der giver dig mulighed for at handle på eventuelle undtagelser, der kan forekomme, og kontrollere forbindelsesstatus, når som helst du har brug for det. Du vil stadig ikke kunne fange disse undtagelser, men din ansøgning vil i det mindste blive gjort opmærksom på dem. En ting at bemærke er, at det kan tage noget tid for forbindelsen at blive etableret (eller mislykkes), så hvis du bare er interesseret i at oprette en engangsforbindelse, vil jeg anbefale at implementere en sleep loop, der kontrollerer, om forbindelsen er OK og mislykkede/undtagelsestilstande. Jeg skrev denne løsning ved hjælp af version 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. Mongoose String til ObjectID

  2. MongoDB eller CouchDB - egnet til produktion?

  3. Modellering af blogs og vurderinger i mongodb og nodejs

  4. Docker mongo-billede 'Forbindelse nægtet' fra anden container