MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Driver Java MongoDB 3.0 tidak dapat menangkap pengecualian saat mengautentikasi

Versi terbaru dari MongoDB java API melemparkan pengecualian koneksi di dalam utas monitor daemon terpisah, itulah sebabnya Anda tidak dapat menangkapnya- runner ada di sini di jejak tumpukan Anda:com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run

Untuk memantau pengecualian klien MongoDB, Anda dapat menambahkan pendengar yang memungkinkan Anda untuk bertindak atas pengecualian apa pun yang mungkin terjadi dan memeriksa status koneksi kapan pun Anda butuhkan. Anda masih tidak akan dapat menangkap pengecualian ini, tetapi aplikasi Anda setidaknya akan mengetahuinya. Satu hal yang perlu diperhatikan adalah perlu beberapa waktu untuk membuat koneksi (atau gagal), jadi jika Anda hanya tertarik untuk membuat koneksi sekali pakai, saya sarankan menerapkan loop tidur yang memeriksa koneksi OK dan status gagal/pengecualian. Saya menulis solusi ini menggunakan versi 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. temukan dan hitung dalam satu permintaan mongodb

  2. MongoDB - Kesalahan:perintah getMore gagal:Kursor tidak ditemukan

  3. Cascading Kustom di Spring Data MongoDB

  4. Cara membuat Indeks TTL pada stempel waktu yang panjang di MongoDB

  5. Sumber Daya MongoDB Teratas