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
相关产品推荐
相关产品推荐

