Scala Slick threadLocalSession与隐式session

Scala Slick threadLocalSession与隐式session,scala,playframework,playframework-2.0,slick,Scala,Playframework,Playframework 2.0,Slick,我在发布此问题时遇到此问题: 我对圆滑和并发性非常陌生,只知道基本知识。我以前使用过JDBC,但是在那里您必须手动打开一个会话,然后关闭它。没有什么比这更重要了,自动化程度也很低(至少我不必进行自动化处理) 然而,我对这场圆滑的会议感到困惑。在本教程中,示例“入门”鼓励人们使用threadLocalSession: //使用隐式threadLocalSession 导入Database.threadLocalSession 最初的建议是: 我们使用的唯一额外导入是threadLocalSess

我在发布此问题时遇到此问题:

我对圆滑和并发性非常陌生,只知道基本知识。我以前使用过JDBC,但是在那里您必须手动打开一个会话,然后关闭它。没有什么比这更重要了,自动化程度也很低(至少我不必进行自动化处理)

然而,我对这场圆滑的会议感到困惑。在本教程中,示例“入门”鼓励人们使用
threadLocalSession

//使用隐式threadLocalSession

导入Database.threadLocalSession

最初的建议是:

我们使用的唯一额外导入是threadLocalSession。这 通过将会话附加到当前会话,简化了会话处理 线程,这样您就不必自己传递它(或者至少 将其指定给隐式变量)

嗯,我在网上做了一些研究,有些人建议不要使用threadLocalSession,而只使用隐式session。有些人建议使用threadLocalSession

支持隐式会话的一个原因是“确保在编译时有一个会话”。我只有两个问题:

  • 当人们使用“线程”时,他们指的是并发吗?Slick/JDBC数据存储是通过并发处理的吗

  • 哪条路更好?隐式还是线程本地会话?或者什么时候用哪个

  • 如果问得不多,我在Scala书中的某个地方读了
    {implicit session:session=>…}
    的语法,但我忘了它在哪里。这个表达式是什么

  • 以这种方式调用threadLocalSession是因为它存储在“thread local variable”(线程局部变量)中,该变量是当前执行线程的局部变量

  • 从Slick 2开始,我们建议不要使用threadLocalSession(现在称为dynamicSession),除非您看到对它的特殊需求并意识到其缺点。顺便说一下,threadLocalSession也是隐式的。问题是,threadLocalSession只有在调用堆栈的某个地方发生withSession(在Slick 2.0 withDynSession中)调用时才在运行时有效。如果没有,代码仍会编译,但在运行时失败

  • {implicit session:session=>…}是一个从(显式注释类型)session到…,其中session作为隐式值存在于。在db.withSession{implicit session:session=>…}中,db创建一个会话,将其传递到传递给withSession的闭包中。在闭包体…,会话是隐式的,可以被.list调用等隐式使用