mongodb - Mongo Scala Play - java.lang.NoSuchMethodError : com. mongodb.ConnectionString.getApplicationName()Ljava/lang/String;]

标签 mongodb scala playframework

我正在尝试在 scala play mongo 原型(prototype)上进行基本的 CRUD。该代码作为独立的主方法工作 - 但当作为通过 Controller 调用的 Play 应用程序执行时,会出现运行时异常

[debug] Running task... Cancel: Null, check cycles: false, forcegc: true
[info] play.api.Play - Application started (Dev)
[error] application - 

! @7b9n058gm - Internal server error, for (GET) [/mongoTestUserCollection] ->

play.api.http.HttpErrorHandlerExceptions$$anon$1: Execution exception[[RuntimeException: java.lang.NoSuchMethodError: com.mongodb.ConnectionString.getApplicationName()Ljava/lang/String;]]
        at play.api.http.HttpErrorHandlerExceptions$.throwableToUsefulException(HttpErrorHandler.scala:280)
        at play.api.http.DefaultHttpErrorHandler.onServerError(HttpErrorHandler.scala:206)
        at play.api.GlobalSettings$class.onError(GlobalSettings.scala:160)
        at play.api.DefaultGlobal$.onError(GlobalSettings.scala:188)
        at play.api.http.GlobalSettingsHttpErrorHandler.onServerError(HttpErrorHandler.scala:98)
        at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:100)
        at play.core.server.netty.PlayRequestHandler$$anonfun$2$$anonfun$apply$1.applyOrElse(PlayRequestHandler.scala:99)
        at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:346)
        at scala.concurrent.Future$$anonfun$recoverWith$1.apply(Future.scala:345)
        at scala.concurrent.impl.CallbackRunnable.run(Promise.scala:36)
Caused by: java.lang.RuntimeException: java.lang.NoSuchMethodError: com.mongodb.ConnectionString.getApplicationName()Ljava/lang/String;
        at play.api.mvc.ActionBuilder$$anon$2.apply(Action.scala:463)
        at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:112)
        at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5$$anonfun$apply$6.apply(Action.scala:112)
        at play.utils.Threads$.withContextClassLoader(Threads.scala:21)
        at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:111)
        at play.api.mvc.Action$$anonfun$apply$2$$anonfun$apply$5.apply(Action.scala:110)
        at scala.Option.map(Option.scala:146)
        at play.api.mvc.Action$$anonfun$apply$2.apply(Action.scala:110)
        at play.api.mvc.Action$$anonfun$apply$2.apply(Action.scala:103)
        at scala.concurrent.Future$$anonfun$flatMap$1.apply(Future.scala:253)
Caused by: java.lang.NoSuchMethodError: com.mongodb.ConnectionString.getApplicationName()Ljava/lang/String;
        at com.mongodb.MongoClientSettings$Builder.applyConnectionString(MongoClientSettings.java:181)
        at org.mongodb.scala.MongoClient$.apply(MongoClient.scala:62)
        at org.mongodb.scala.MongoClient$.apply(MongoClient.scala:50)
        at com.test.db.mongodb.MongoDBConnector$.<init>(MongoDBConnector.scala:25)
        at com.test.db.mongodb.MongoDBConnector$.<clinit>(MongoDBConnector.scala)
        at com.test.db.mongodb.Repo$class.$init$(Repo.scala:15)
        at com.test.db.mongodb.UserSessionHistory2MongoDBCollection$.<init>(Repo.scala:42)
        at com.test.db.mongodb.UserSessionHistory2MongoDBCollection$.<clinit>(Repo.scala)
        at com.test.controllers.AsyncController$$anonfun$testUserSessionHistory2MongoDBCollection$1.apply(AsyncController.scala:83)
        at com.test.controllers.AsyncController$$anonfun$testUserSessionHistory2MongoDBCollection$1.apply(AsyncController.scala:83)

我尝试更改驱动程序版本 - 但出现同样的错误

构建.sbt:

scalaVersion := "2.11.8"
  "org.mongodb.scala" %% "mongo-scala-driver" % "2.3.0",
  "org.mongodb.scala" %% "mongo-scala-bson" % "2.3.0",

连接器:

  val mongoClient: MongoClient = MongoClient("mongodb://server-internal.com:27017/")
  val codecRegistry = fromRegistries(fromProviders(classOf[HistoryRecord]), DEFAULT_CODEC_REGISTRY )
  val database = mongoClient.getDatabase("db-test").withCodecRegistry(codecRegistry)

如果我按如下方式调用该代码,则该代码将起作用:

object MongoService {
  def makeMongoCalls(repo: Repo) = {
    repo.insertHistoryRecords(5)
  }

  def main(args: Array[String]): Unit = {
    makeMongoCalls(UserSessionHistory2MongoDBCollection)
  }
}

最佳答案

Caused by: java.lang.NoSuchMethodError: com.mongodb.ConnectionString.getApplicationName()Ljava/lang/String;

这种情况经常发生在库冲突的情况下。

  1. 运行sbt clean
  2. 检查依赖项中是否没有其他 MongoDB 驱动程序。一些可以使用它的库。
  3. 尝试从依赖项中删除 "org.mongodb.scala"%% "mongo-scala-bson"% "2.3.0""org.mongodb.scala"%% "mongo-scala-driver"% "2.3.0" 已经有了。

关于mongodb - Mongo Scala Play - java.lang.NoSuchMethodError : com. mongodb.ConnectionString.getApplicationName()Ljava/lang/String;],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55287521/

相关文章:

comet - Play! 的 Comet 支持如何工作?

json - Scala Play框架中将json数组转换为模型类的Seq

scala - ~> 和 <~ 解析器组合运算符的实现

scala - 如何在scala中组合两个元组?

C#。将对象列表保存到 Mongo 的最快方法

node.js - Mongoose 错误 : Cast to embedded failed for value

scala - 从文件创建 Scala Reader

html - 使用 Play form helper 对某些字段进行并排布局

javascript - 数据在本地主机上实时更新,但不在实时服务器上(Node js + MongoDB)

java - 使用 Java 驱动程序的 MongoDB 异常