gpt4 book ai didi

scala - Slick threadLocalSession 与隐式 session

转载 作者:行者123 更新时间:2023-12-04 12:08:48 26 4
gpt4 key购买 nike

我在发布这个问题时遇到了这个问题:Slick Write a Simple Table Creation Function

我对 Slick 和并发非常陌生,只知道基础知识。我以前使用过 JDBC,但在那里你必须手动打开一个 session ,然后关闭它。没有什么比这更重要的了,而且几乎没有自动化(至少我不必进行自动化过程)。

但是,我对 Slick session 感到困惑。在教程中,示例“入门”鼓励人们使用 threadLocalSession :

// Use the implicit threadLocalSession

import Database.threadLocalSession



http://slick.typesafe.com/doc/1.0.0/gettingstarted.html

原来的建议是:

The only extra import we use is the threadLocalSession. This simplifies the session handling by attaching a session to the current thread so you do not have to pass it around on your own (or at least assign it to an implicit variable).



嗯,我在网上查了一下,有人建议不要使用threadLocalSession,只使用隐式 session 。有些人建议使用 threadLocalSession。

支持隐式 session 的一个原因是“确保在编译时有一个 session ”。好吧,我只有两个问题:
  • 当人们使用“线程”时,他们指的是并发吗? Slick/JDBC 数据存储是通过并发处理的?
  • 哪种方式更好?隐式还是threadLocalSession?或者什么时候使用哪个?
  • 如果不是问太多,我看了{implicit session:Session => ...}的语法在我的 Scala 书中的某个地方,我忘记了它在哪里。这是什么表情?
  • 最佳答案

  • 以这种方式调用 threadLocalSession 是因为它存储在“线程局部变量”中,即当前执行线程的局部变量。
  • 从 Slick 2 开始,我们建议不要使用 threadLocalSession(现在称为 dynamicSession),除非您看到它的特殊需要并且知道它的缺点。顺便说一下,threadLocalSession 也是隐式的。问题是,只有当 withSession(在 Slick 2.0 withDynSession 中)调用发生在调用堆栈的某个位置时,threadLocalSession 才在运行时有效。如果不是,代码仍然可以编译但在运行时失败
  • {implicit session:Session => ...} 是从(显式注释类型)Session 到 ... 的函数,其中 session 可用作 ... 中的隐式值。在 db.withSession{implicit session:Session => ... } 中,db 创建了一个 session ,将它传递到交给 withSession 的闭包中。在闭包体...中, session 是隐式的,可以被 .list 调用等隐式使用
  • 关于scala - Slick threadLocalSession 与隐式 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20722440/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com