首页 > 解决方案 > 调用过程的 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.



     
     

标签: scalastored-proceduresakkaslickalpakka

解决方案


推荐阅读