You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 03:00:02