Oracle Slick创建一个新会话并保持其打开状态
我的scala应用程序与Oracle数据库一起工作,Oracle数据库具有活动会话的限制。 我通过Typesafe Slick将AKKA actors用于Oracle DB的并发任务 这是演员工作的例子:Oracle Slick创建一个新会话并保持其打开状态,oracle,scala,session,akka,slick,Oracle,Scala,Session,Akka,Slick,我的scala应用程序与Oracle数据库一起工作,Oracle数据库具有活动会话的限制。 我通过Typesafe Slick将AKKA actors用于Oracle DB的并发任务 这是演员工作的例子: def marketPlaceDataRefresh[T](targetArea:String, customerId:String, wave:String) = clientPool.withClient(targetArea.toUpperCase) { implic
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的基本知识
如何创建单个会话并使其对所有并发任务保持打开状态?会话不应长时间保持打开状态。也就是说,您始终可以手动处理会话。从中,您可以使用以下方式打开会话:
val session : Session = db.createSession
...run the queries normally...
session.close // close the session
然而,我永远不会使用像那样危险的东西。迟早会有一个bug,会话将退出(即,您将忘记关闭它),从而使数据库停止 我对这个问题没有答案,只是考虑一下,我认为你不应该这样做,会话被打开,使用,然后返回到db会话池,这是一种快速而安全的机制,如果你在参与者中打开了一个会话,可能没有使用,会发生什么?如果参与者崩溃并且会话未正确关闭,甚至是最糟糕的情况?