首页 > 解决方案 > MongoDB:mongoClient打开后立即关闭

问题描述

package gateways;

import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoDatabase;
import org.bson.Document;

import java.util.logging.Level;
import java.util.logging.Logger;

public class Mongodb {

    public MongoDatabase database;

    public Mongodb(){

        Logger.getLogger("org.mongodb.driver").setLevel(Level.SEVERE);
        try (MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017")) {
            database = mongoClient.getDatabase("csc207");
            MongoCollection<Document> usersCollection = database.getCollection("users");
        }

    }
}

我无法在其他类中访问我的数据库,因为它在打开后立即关闭。

Exception in thread "main" java.lang.IllegalStateException: state should be: open

[我一直在寻找这个 2-3 小时,请帮助我]。我正在使用 MongoDB Java 驱动程序 4.1.1。

标签: javamongodb

解决方案


这是由于您使用了try-with-resources语句。当您mongoClienttry这样的方式打开时,一旦您退出客户端tryclose方法就会被调用,从而关闭您与 MongoDB 的连接。

据我所知,没有它你应该没问题,所以你可以摆脱它并最终得到这样的结果:

public Mongodb() {
    Logger.getLogger("org.mongodb.driver").setLevel(Level.SEVERE);
    MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");
    database = mongoClient.getDatabase("csc207");
    MongoCollection<Document> usersCollection = database.getCollection("users");
}

推荐阅读