【发布时间】:2021-09-12 13:35:36
【问题描述】:
我有一个 scala 主类
object Job extends App {
def myProcedure() = {
sqlu"""CALL `dbName`.`update_history();"""
}
implicit val system: ActorSystem = ActorSystem()
implicit val mat: ActorMaterializer = ActorMaterializer()
implicit val ec = system.dispatcher
implicit val session: SlickSession = SlickSession.forConfig("my-mysql")
val proc = session.db.run(myProcedure))
val terminatedF = proc.flatMap { rec =>
println("value of the procedure ::" + rec)
session.close()
system.terminate()
}
Await.result(terminatedF, Duration.Inf)
println("terminated :::")
}
我看到rec 的值被打印出来,terminated ::: 也被打印出来,即最后一行也被打印出来。然而程序并没有结束。我这里有什么遗漏吗?
【问题讨论】:
-
您可能需要以某种方式“关闭”或“终止”该会话。我不知道 slick,但是这个 sn-p 看起来不像是写给我的,让
session像这样坐在那里。这不是访问外部资源的代码通常看起来的样子。对于您的问题,它内部可能有一个线程池,可以防止您的程序退出。尝试筛选光滑的文档,专门寻找会话管理。 -
感谢您的回复,但我发现了问题所在。它与 slick 无关,但与使 JVM 优雅退出有关
-
如果“优雅地退出”,
System.exit是相反的。你不应该需要它,你这样做的原因实际上可能与光滑有关:)
标签: scala future slick actor actorsystem