mongodb连接池

时间:2012-01-23 06:54:34

标签: java mongodb connection-pooling

我正在使用Java驱动程序访问mongodb。我假设数据库连接池是由驱动程序在内部处理的。但是每次访问数据库时我的连接数都会增加。

这是我的serverStatus日志。

"connections" : {
            "current" : 276,
            "available" : 543
    }

我是否需要明确关闭mongo连接?我该如何管理java中的连接池?

3 个答案:

答案 0 :(得分:17)

你应该使用一个Mongo对象,所以它会为你做池。但是,如果您确实使用了多个对象,则需要明确调用.close()

来自:http://www.mongodb.org/display/DOCS/Java+Tutorial

  

Mongo类设计为线程安全并在其中共享   线程。通常,您只为给定的数据库集群创建一个实例   并在您的应用程序中使用它。如果由于某种原因你决定创建   许多蒙古国的话,请注意:

     

每个mongo都应用所有资源使用限制(最大连接数等)   处理实例的实例,请确保调用mongo.close()   清理资源

答案 1 :(得分:1)

您可以设置最大池大小mongodb:// *** /?maxPoolSize = 5以获取详细信息 查看此文档 https://docs.mongodb.com/manual/reference/connection-string/

答案 2 :(得分:1)

MongoDB,MongoDB充当mongoDB的连接池,它是按应用程序和每个DB创建的。

通常,您只为给定的MongoDB部署(例如独立,副本集或分片集群)创建一个MongoClient实例,并在整个应用程序中使用它。但是,如果您确实创建了多个实例:

所有资源使用限制(例如,最大连接数等)适用于每个MongoClient实例。

参考:http://mongodb.github.io/mongo-java-driver/3.4/driver/tutorials/connect-to-mongodb/

MongoClientOptions options = 
MongoClientOptions.builder()
            .threadsAllowedToBlockForConnectionMultiplier(prop.getThreadsAllowedToBlock())
.connectionsPerHost(pro.getConnectionsPerHost())
.connectTimeout(prop.getConnectionTimeout())
.maxWaitTime(prop.getConnectionTimeout())
.socketTimeout(1000)
.heartbeatConnectTimeout(prop.getHeartbeatConnectTimeout())
.writeConcern(WriteConcern.ACKNOWLEDGED).build();

MongoClient mongoclient = new MongoClient(seeds,credential, options); credential, options);

这正在作为连接池。我们可以从MongoClient实例化MongoTemplate。