Kotlin项目使用KMongo连接MongoDB时创建2个连接问题咨询
问题成因
- 驱动内置集群监控连接
KMongo基于MongoDB官方Java异步驱动封装,驱动默认会启动后台集群监控线程,独立占用1个长连接,用于定期采集节点健康状态、集群拓扑变更、服务延迟等管理类指标,该连接不承载业务请求,属于驱动内部的预留连接。 - 业务连接池预创建的最小连接
MongoClient默认连接池配置的minConnectionPoolSize参数值为1,客户端初始化完成后会预先创建1个空闲的业务连接等待请求,降低首次请求的响应延迟。
两个连接叠加就是你观测到的2个连接,属于正常的默认行为,并非代码逻辑问题导致的重复创建连接。
验证方案
如果你需要确认该逻辑,可以手动修改连接池配置,将最小连接数设置为0,此时无业务请求的状态下只会存在1个监控连接,和预期一致,修改示例如下:
import com.mongodb.ConnectionString import com.mongodb.MongoClientSettings object Mongo { lateinit var connectionString: String lateinit var database: String private lateinit var mongo: MongoDatabase fun connect() { val clientSettings = MongoClientSettings.builder() .applyConnectionString(ConnectionString(connectionString)) // 自定义连接池配置 .applyToConnectionPoolSettings { builder -> builder.minSize(0) // 关闭预创建空闲业务连接 } .build() val client = KMongo.createClient(clientSettings) mongo = client.getDatabase(database) } fun get(collection: String): CoroutineCollection<Document> { return this.mongo.getCollection(collection).coroutine } }
内容的提问来源于stack exchange,提问作者Marian
相关产品推荐
相关产品推荐

