MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB java driver 3.0 không thể bắt ngoại lệ khi xác thực

Các phiên bản gần đây của MongoDB java API đưa ra các ngoại lệ kết nối trong một chuỗi giám sát daemon riêng biệt, đó là lý do tại sao bạn không thể bắt được nó- trình chạy ở đây trong dấu vết ngăn xếp của bạn: com.mongodb.connection.DefaultServerMonitor $ ServerMonitorRunnable.run

Để theo dõi ứng dụng khách MongoDB cho các trường hợp ngoại lệ, bạn có thể thêm trình lắng nghe cho phép bạn hành động trên bất kỳ trường hợp ngoại lệ nào có thể xảy ra và kiểm tra trạng thái kết nối bất cứ lúc nào bạn cần. Bạn vẫn sẽ không thể nắm bắt những trường hợp ngoại lệ này, nhưng ứng dụng của bạn ít nhất sẽ được thông báo về chúng. Một điều cần lưu ý là có thể mất một khoảng thời gian để kết nối được thiết lập (hoặc không thành công), vì vậy nếu bạn chỉ quan tâm đến việc tạo kết nối sử dụng một lần, tôi khuyên bạn nên triển khai vòng lặp ngủ để kiểm tra kết nối. và các trạng thái không thành công / ngoại lệ. Tôi đã viết giải pháp này bằng phiên bản 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. Mongo Shell - Bảng điều khiển / Nhật ký gỡ lỗi

  2. Tại sao MongoDB yêu cầu `duy nhất:true` để tạo một bộ sưu tập?

  3. 2 cách để hiện một chỉ mục trong MongoDB

  4. Nối tiếp một lớp theo hai cách khác nhau với Jackson

  5. Tra cứu tổng hợp Mongodb với các điều kiện