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

ReactiveMongo 0.20.11版本MongoConnectionOptions连接数据库方案咨询

解决ReactiveMongo 0.20.11中MongoConnectionOptions的连接问题

我刚好在升级ReactiveMongo到0.20.x版本时碰到过这个问题,官方确实弃用了MongoConnectionOptions伴生对象的apply方法,而且构造函数是包私有没法直接调用。不过不用慌,有两种完全合规的方式来创建连接选项,彻底避开弃用警告:

方法一:用Builder模式自定义选项

0.20.x版本官方推荐用MongoConnectionOptions.Builder来构建连接选项,这是最灵活的方式。示例代码如下:

import reactivemongo.api.MongoConnectionOptions

val connectionOpts = MongoConnectionOptions.builder()
  .withConnectTimeout(5000) // 配置连接超时(毫秒)
  .withMaxIdleTime(300000) // 连接最大空闲时间
  .withReadPreference(reactivemongo.api.ReadPreference.PrimaryPreferred) // 设置读偏好
  .build() // 生成最终的连接选项实例

你可以根据自己的需求,调用Builder上的各种withXXX方法来配置所有需要的参数,比如认证信息、socket超时、写关注点等等。

方法二:从连接字符串自动解析选项

如果你习惯用MongoDB标准连接字符串的方式配置,直接把参数嵌在URL里,然后通过MongoConnection.fromString解析就行,这种方式会自动生成对应的MongoConnectionOptions:

import reactivemongo.api.MongoConnection

val connStr = "mongodb://localhost:27017/mydb?connectTimeoutMS=5000&maxIdleTimeMS=300000&readPreference=primaryPreferred"
val parsedResult = MongoConnection.fromString(connStr)

parsedResult match {
  case Right((uri, opts)) => 
    // 解析成功,uri是MongoURI实例,opts就是对应的连接选项
    val connection = MongoConnection(uri, opts)
  case Left(error) => 
    // 处理解析失败的情况
    println(s"Failed to parse connection string: $error")
}

这种方式的好处是不用手动构建选项对象,复用大家熟悉的MongoDB连接字符串格式,所有参数都通过URL传递。

小技巧:基于默认选项做微调

如果只需要修改少数几个参数,也可以直接拿默认选项做copy修改(因为MongoConnectionOptions是不可变类):

import reactivemongo.api.MongoConnectionOptions

val defaultOpts = MongoConnectionOptions.default
val customOpts = defaultOpts.copy(connectTimeout = 5000, maxIdleTime = 300000)

这种方式简单快捷,适合只需要调整个别参数的场景。

内容的提问来源于stack exchange,提问作者peterschrott

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:57:28