加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – Slick threadLocalSession vs隐式会话

发布时间:2020-12-16 19:18:50 所属栏目:安全 来源:网络整理
导读:我在发布这个问题时遇到了这个问题: Slick Write a Simple Table Creation Function 我对Slick和并发很新,只知道基础知识.之前我使用过JDBC,但在那里你必须手动打开一个会话然后关闭它.没有什么比这更好了,自动化很少(至少我不需要进行自动化处理). 但是,我
我在发布这个问题时遇到了这个问题: Slick Write a Simple Table Creation Function

我对Slick和并发很新,只知道基础知识.之前我使用过JDBC,但在那里你必须手动打开一个会话然后关闭它.没有什么比这更好了,自动化很少(至少我不需要进行自动化处理).

但是,我对Slick会话感到困惑.在本教程中,示例“Getting Started”鼓励人们使用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,只使用隐式会话.有人建议使用threadLocalSession.

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

>当人们使用“线程”时,他们是指并发吗? Slick / JDBC数据存储是通过并发处理的吗?
>哪种方式更好?隐式或threadLocalSession?或何时使用哪个?
>如果问题不是太多,我会阅读{implicit session:Session =>在我的Scala书中的某个地方,我忘记了它的位置.这个表达是什么?

解决方法

>以这种方式调用threadLocalSession,因为它存储在当前执行线程本地的“线程局部变量”中. >从Slick 2开始,我们建议不要使用threadLocalSession(现在称为dynamicSession),除非你看到它的特殊需要并且意识到它们的缺点.顺便说一句,threadLocalSession也是隐式的.问题是,当一个withSession(在Slick 2.0 withDynSession中)调用发生在调用堆栈的某个地方时,threadLocalSession仅在运行时有效.如果没有,代码仍然编译但在运行时失败 > {隐式会话:会话=> …}是一个函数,从(明确注释的类型)Session到…,其中会话可用作…中的隐式值.在db.withSession中{隐式会话:会话=> …},db创建一个会话,将其传递给传递给withSession的闭包.在闭包体……中,会话是隐式的,可以由.list调用等隐式使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读