Dee*_*pan 7 java connection-pooling mongodb
我正在使用Java驱动程序访问mongodb.我假设数据库连接池是由驱动程序在内部处理的.但是每次访问数据库时我的连接数都会增加.
这是我的serverStatus日志.
"connections" : {
"current" : 276,
"available" : 543
}
Run Code Online (Sandbox Code Playgroud)
我是否需要明确关闭mongo连接?我该如何管理java中的连接池?
Eve*_*man 18
您应该使用单个Mongo对象,因此它将为您进行池化.但是,如果确实使用了多个对象,则需要.close()显式调用.
来自:http://www.mongodb.org/display/DOCS/Java+Tutorial
Mongo类被设计为线程安全并在线程之间共享.通常,您只为给定的数据库集群创建一个实例,并在整个应用程序中使用它.如果由于某种原因你决定创建许多mongo inances,请注意:
所有资源使用限制(最大连接数等)都适用于每个mongo实例来处理实例,请确保调用mongo.close()来清理资源
小智 5
MongoDB,MongoDB 充当 mongoDB 的连接池,它是为每个应用程序和每个数据库创建的。
通常,您只需为给定的 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);
Run Code Online (Sandbox Code Playgroud)
这是作为连接池工作的。我们可以从 MongoClient 实例化 MongoTemplate。
| 归档时间: |
|
| 查看次数: |
32076 次 |
| 最近记录: |