没有提供MySQL java驱动程序时,Slick静默失败

时间:2017-02-07 15:34:22

标签: mysql scala slick

如果我在build.sbt中有这个

libraryDependencies ++= List(
  "com.typesafe.slick" %% "slick" % slickV,
  "org.slf4j" % "slf4j-nop" % "1.6.4",
  "mysql" % "mysql-connector-java" % "5.1.40"
)

然后以下代码产生预期结果:

    try{
      db.run((for(visitor <- visitors) yield visitor).result.headOption).map(println(_))
    }catch{
      case e:Throwable => e.printStackTrace()
    }finally db.close()

但是当我从依赖项中删除最后一行"mysql" % "mysql-connector-java" % "5.1.40"时,就没有任何事情发生了。我没有打印结果,但有趣的是我也没有得到任何错误。 这是Slick的预期行为吗?你能帮我澄清一下在这种情况下使用的驱动程序以及会发生什么?原因可能是slf4j-nop,是否可以隐藏任何错误/警告输出?

1 个答案:

答案 0 :(得分:1)

<强>首先

将您的代码更改为:

  db.run((
      for(visitor <- visitors) yield visitor).result.headOption).map(println(_)
  ).recover {
      case e: Throwable => e.printStackTrace()
  }.onComplete {
      case _ => db.close()
  }

<强>第二

我不知道您运行代码的位置,但如果它是main方法的某种单元测试,那么您可能在上面的代码运行之前完成执行(请记住db.run调用异步执行)。

我不会详细说明你应该如何正确处理这个问题(绝对天真的等待/睡眠不是代码的方式 - 无论是在生产代码还是在单元测试中)。但是,为了解决您的上述问题,请在上面的代码之后加上:

Thread.sleep(5000)

让我们看看它是否有帮助。如果还有其他问题,我们可以从那里跟进。