clusterSettings не является членом com.mongodb.MongoClientSettings.Builder - PullRequest
0 голосов
/ 06 июня 2018

Я пытаюсь использовать клиент mongodb из Scala.Я использую IntelliJ IDEA.

В этой строке:

val settings: MongoClientSettings = MongoClientSettings
                                             .builder()
                                             .clusterSettings(clusterSettings)
                                             .build()

Я получаю сообщение об ошибке:

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"

И включает в себя:

import com.mongodb.ServerAddress
import org.mongodb.scala.MongoClientSettings
import org.mongodb.scala.connection.ClusterSettings

Кажется, чтони у кого нет этой проблемы в интернете, но у моего коллеги недавно была такая же проблема.Любые идеи, в чем здесь проблема?

ОБНОВЛЕНИЕ:

Согласно комментарию от Росса я изменил sbt:

scalaVersion := "2.11.12"
libraryDependencies += "org.mongodb.scala" %% "mongo-scala-driver" % "2.3.0"

И изменилкод:

import com.mongodb.connection.ClusterSettings
import org.mongodb.scala.MongoClientSettings

val settings: MongoClientSettings = MongoClientSettings
  .builder()
  .applyToClusterSettings((b: ClusterSettings.Builder) => b.applySettings(clusterSettings))
  .build()

Теперь IDEA не жалуется и видит все API, но во время компиляции я получаю ошибку:

Ошибка: (9, 60) несоответствие типов;найдено: com.mongodb.connection.ClusterSettings.Builder => com.mongodb.connection.ClusterSettings.Builder требуется: com.mongodb.Block [com.mongodb.connection.ClusterSettings.Builder] .applyToClusterSettingS (btings).=> 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()

В чем может быть причина?

1 Ответ

0 голосов
/ 06 июня 2018

Произошло изменение в псевдониме типа в 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...