我正在尝试使用scala中的mongodb客户端.我使用IntelliJ IDEA.
在这一行:
val settings: MongoClientSettings = MongoClientSettings
.builder()
.clusterSettings(clusterSettings)
.build()
Run Code Online (Sandbox Code Playgroud)
我收到错误:
clusterSettings不是com.mongodb.MongoClientSettings.Builder的成员
虽然依赖和导入似乎是正确的.
这是sbt文件:
scalaVersion := "2.11.12"
libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" % "2.3.0"
libraryDependencies += "org.mongodb" % "mongodb-driver-core" % "3.7.0"
Run Code Online (Sandbox Code Playgroud)
这里包括:
import com.mongodb.ServerAddress
import org.mongodb.scala.MongoClientSettings
import org.mongodb.scala.connection.ClusterSettings
Run Code Online (Sandbox Code Playgroud)
似乎没有人在互联网上出现这个问题,但我的同事最近也遇到了同样的问题.任何想法在这里有什么问题?
更新:
根据罗斯的评论我修改了sbt:
scalaVersion := "2.11.12"
libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" % "2.3.0"
Run Code Online (Sandbox Code Playgroud)
并修改代码:
import com.mongodb.connection.ClusterSettings
import org.mongodb.scala.MongoClientSettings
val settings: MongoClientSettings = MongoClientSettings
.builder()
.applyToClusterSettings((b: ClusterSettings.Builder) => b.applySettings(clusterSettings))
.build()
Run Code Online (Sandbox Code Playgroud)
现在IDEA没有抱怨,它看到所有的API,但在编译期间我得到错误:
错误:(9,60)类型不匹配; 发现:com.mongodb.connection.ClusterSettings.Builder => com.mongodb.connection.ClusterSettings.Builder required:com.mongodb.Block [com.mongodb.connection.ClusterSettings.Builder] .applyToClusterSettings((b:ClusterSettings.Builder) => b.applySettings(clusterSettings))
但是如果我在外面定义块然后使用它 - 它成功编译:
val block: Block[ClusterSettings.Builder] = new Block[ClusterSettings.Builder] {
override def apply(t: ClusterSettings.Builder): Unit = {
t.applySettings(clusterSettings)
}
}
val settings: MongoClientSettings = MongoClientSettings
.builder()
.applyToClusterSettings(block)
.build()
Run Code Online (Sandbox Code Playgroud)
可能是什么原因?
2.3.0中的类型别名发生了更改,MongoClientSettings并且与上一个构建器的API略有不同.请参阅升级指南:http://mongodb.github.io/mongo-scala-driver/2.3/upgrade/#mongoclientsettings
它被改变的原因是因为它com.mongodb.async.client.MongoClientSettings被弃用而不是新的集中式MongoClientSettings.
您现在仍可以使用已弃用的设置.更新(刷新)你的sbt项目,intellij将突出显示clusterSettings构建器上缺少方法.
将设置应用于新的示例MongoClientSettings:
import com.mongodb.connection.ClusterSettings
// Scala 2.12 (support for Single Abstract Methods)
val clientSettings: MongoClientSettings = MongoClientSettings
.builder()
.applyToClusterSettings((b: ClusterSettings.Builder) => b.applySettings(clusterSettings))
.build()
// Scala 2.11 you must provide the block:
val clientSettings: MongoClientSettings = MongoClientSettings
.builder()
.applyToClusterSettings(new Block[ClusterSettings.Builder]() {
override def apply(b: ClusterSettings.Builder): Unit = b.applySettings(clusterSettings)
})
.build()
Run Code Online (Sandbox Code Playgroud)