亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

您好,求解釋:關于在微服務下如何實現session共享?

您好,求解釋:關于在微服務下如何實現session共享?

catspeake 2019-12-03 10:06:30
在微服務下如何實現session共享
查看完整描述

3 回答

?
蝴蝶不菲

TA貢獻1810條經驗 獲得超4個贊

Hibernat 對數據庫的操作是通過Session來實現的,這里的session不同于頁面間傳遞參數的session,
而是類似于JDBC中的 Connection。Session是Hibernate運作的中心,對象的生命周期、事務的管理、數據庫的存取都與session息息相關。
Session是由HibernateSessionFactory創建的,是線程安全的,可以讓多個執行線程同時存取
HibernateSessionFactory而不會有數據共享的問題,但不能讓多個線程共享一個Session。
SessionFactory對象的創建:

Java代碼
Configuration cfg = new Configuration().configure();
SessionFactory sessions = cfg.buildSessionFactory();

session創建時使用了一個ThreadLocal類來建立一個Session管理的輔助類,使用ThreadLocal可以有效隔離執行所用的數據,
避開了Session的多線程之間的數據共享問題。

//創建一個線程本地變量。

Java代碼
public static final ThreadLocal<Session> threadlocal = new ThreadLocal<Session>();
public static org.hibernate.SessionFactory sessionFactory;

//獲取session的方法
public static Sessin getSession() throws HibernateException{
//返回線程局部變量的當前線程的值
Session s = (Session)threadLocal.get();
//如果sessionFactory為空,重新創建sessionFactory;如果線程為空,就打開一個新的session
if(session==null || !session.isOpen()){
if(sessionFactory == null){
rebuildSessionFactory(); session = (sessionFactory != null) sessionFactory.openSession():null;
// 將hibernate的session放入到線程中保存;只要這個線程不結束,都可以通過線程的get()方法來獲取
threadLocal.set(session);return session;



查看完整回答
反對 回復 2019-12-15
  • 3 回答
  • 0 關注
  • 920 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號