如果我在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
,是否可以隐藏任何错误/警告输出?
答案 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)
让我们看看它是否有帮助。如果还有其他问题,我们可以从那里跟进。