scala - 调用过程的 Slick Query 不会终止程序
问题描述
我有一个使用 slick 从数据库查询数据的主程序。它从从 DB 获得的记录构造 JSON,然后发布到一些 kafka 主题。几乎在程序结束时,我试图调用一个更新记录的存储过程。
我的代码如下所示:
implicit val system: ActorSystem = ActorSystem()
implicit val mat: ActorMaterializer = ActorMaterializer()
implicit val ec = system.dispatcher
implicit val session: SlickSession = SlickSession.forConfig("blwl-mysql")
def myProcedure() = {
sqlu"""CALL `dbName`.`update_history();"""
}
然后
for {
record1 <- selectQuery1
record2 <- selectQuery2
// create JSON and publish to kafka, this is done using akka streams to get list of Future[Done]
topicsExecuted: List[Done] <- topicsExecutedF
procedureExecuted: Int <- session.db.run(myProcedure)
_ = println("is successfully executed ::::"+ procedureExecuted)
}
{
session.close()
system.terminate()
}
procedureExecuted
打印一些值并确认该过程已执行,但是它并没有结束主程序。
如果我删除过程调用,程序会正常结束。我还将过程调用转换为 JDBC 语句,它是同步的,也可以正常工作。但是当我尝试使用异步代码(返回 Future 的东西)调用该过程时,程序不会以某种方式结束。
这些是我的图书馆规格:
Manifest-Version: 1.0
Implementation-Title: akka-stream-alpakka-slick
Automatic-Module-Name: akka.stream.alpakka.slick
Implementation-Version: 1.0-M1
Specification-Vendor: Lightbend Inc.
Specification-Title: akka-stream-alpakka-slick
Implementation-Vendor-Id: com.lightbend.akka
Specification-Version: 1.0-M1
Implementation-URL: https://github.com/akka/alpakka
Implementation-Vendor: Lightbend Inc.
解决方案
推荐阅读
- laravel - 广播异常时间戳已过期
- task - 火花流任务始终处于运行状态
- javascript - 用户数组长度和值就地
- javascript - 在 daterangepicker 中,我如何动态设置 minDate?
- c++ - 如何在频繁调用的函数中优化重用大型 std::unordered_map 作为临时函数?
- c++ - 如果在释放 new 运算符分配的内存之前发生异常会发生什么?
- google-calendar-api - 我们可以使用 Google Calendar API 获取多个日历 ID 的事件吗?
- pytorch - 如何将.txt文件(语料库)读入pytorch中的torchtext?
- javascript - 如何使用 Javascript 自动添加第二个表?
- firebase - 为什么我可以设置但不能在 Firestore 中添加文档?