在一个应用程序中哪个应该是单例?MongoClient 或 MongoDatabase 或 MongoCollection?

inz*_*9hi 4 java mongodb

如文档中所述:http : //mongodb.github.io/mongo-java-driver/3.3/driver/getting-started/quick-tour/

MongoClient 实例实际上代表了一个到数据库的连接池;即使有多个线程,您也只需要 MongoClient 类的一个实例。

使用下面的代码可以获得集合(就像 RDMS 中的“表”一样):

MongoDatabase database = mongoClient.getDatabase("mydb");
MongoCollection<Document> collection = database.getCollection("test");
Run Code Online (Sandbox Code Playgroud)

我发现这些代码总是返回新实例,那么,如何在我的应用程序中将MongoDatabaseMongoCollection作为单例呢?

Shi*_*z.M 6

MongoClient 通常应该是单例。你的报价提到了这一点

MongoClient 实例实际上代表了一个到数据库的连接池;即使有多个线程,您也只需要 MongoClient 类的一个实例。

它还在javadocs 中提到了这一点:

具有内部连接池的 MongoDB 客户端。对于大多数应用程序,您应该有一个用于整个 JVM 的 MongoClient 实例。

MongoDatabaseMongoCollection主要作为单例是没有意义的(还有其他原因),因为底层连接可能会变得陈旧,这需要一些编码来刷新单例 MongoDatabase 或单例 MongoCollection。