【问题标题】:Slick create a new session and keep it openSlick 创建一个新会话并保持打开状态
【发布时间】:2014-12-18 16:54:58
【问题描述】:

我的 scala 应用程序与具有活动会话限制的 Oracle 数据库一起使用。 我正在使用 AKKA 演员通过 Typesafe Slick 与 Oracle DB 进行并发任务。

这是演员的工作示例:

def marketPlaceDataRefresh[T](targetArea:String, customerId:String, wave:String) =    
  clientPool.withClient(targetArea.toUpperCase) {
    implicit session =>
      sql"""BEGIN MARKETPLACE_PKG.INIT_DATA_REFRESH($customerId,$wave,$wave,$wave); COMMIT; END;""".as[Int].firstOption
  }

每次当 AKKA 演员调用 def marketPlaceDataRefresh 时,隐式会话打开和关闭。

我只知道并发和 Slick 的基础知识。

如何创建单个会话并使其对所有并发任务保持打开状态?

【问题讨论】:

  • 我没有这个问题的答案,只是一个考虑,我认为你不应该这样做,会话被打开,使用然后返回到数据库会话池,这是一个快速和安全机制,如果你在演员中打开了一个会话并且可能没有使用会发生什么?或者如果演员崩溃并且会话没有正确关闭,甚至更糟?

标签: oracle scala session akka slick


【解决方案1】:

会话不应长时间保持打开状态。话虽如此,您始终可以手动处理会话。从docs,您可以使用以下命令打开会话:

val session : Session = db.createSession
...run the queries normally...
session.close // close the session

但是,我永远不会使用像那样冒险的东西。迟早会有一个错误,会话将逃脱(即您将忘记关闭它)使您的数据库停止。

【讨论】:

    猜你喜欢
    • 2014-08-31
    • 1970-01-01
    • 2012-01-18
    • 2011-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-08
    • 1970-01-01
    相关资源
    最近更新 更多