调用过程的 Slick Query 不会终止程序

问题描述

我有一个使用 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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...