问题描述
我有一个使用 slick 从数据库查询数据的主程序。它从从数据库获取的记录构建 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.
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)