欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Hibernate基于ThreadLocal管理Session過(guò)程解析

 更新時(shí)間:2020年10月26日 09:38:25   作者:Y_wee  
這篇文章主要介紹了Hibernate基于ThreadLocal管理Session過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

1、為什么要使用ThreadLocal管理Session

session是線程不安全的,因此在多線程環(huán)境下,session對(duì)象不能為共享對(duì)象

把Session寫(xiě)成局部變量雖然可以解決線程安全問(wèn)題,但是每次運(yùn)行都要打開(kāi)及關(guān)閉session對(duì)象,導(dǎo)致性能受影響

如果直接調(diào)用調(diào)用sessionfactory.openSession方法,則無(wú)法在業(yè)務(wù)層獲取session對(duì)象

2、ThreadLocal管理Session的配置

2.1、方式一

通過(guò)自定義工具類實(shí)現(xiàn)

package com.yl.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * hibernate工具類
 */
public class HibernateUtils {
  private static SessionFactory sessionFactory;
  private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();

  static {
    //加載配置文件
    Configuration cig = new Configuration().configure();
    //創(chuàng)建工廠
    sessionFactory = cig.buildSessionFactory();
  }

  /**
   * 獲取Session對(duì)象
   */
  public static Session getSession(){
    //判斷threadlocal是否已經(jīng)存在當(dāng)前線程的Session,不存在才創(chuàng)建
    Session session=threadLocal.get();
    if (session==null){
      session=sessionFactory.openSession();
      threadLocal.set(session);
    }
    return session;
  }
  
  /**
   * 關(guān)閉session
   */
  public static void close() {
    Session session = threadLocal.get();
    if (session != null) {
      session.close();
    }
    threadLocal.set(null);
  }
}

2.2、方式二

通過(guò)hibernate.cfg.xml配置文件實(shí)現(xiàn)

在hibernate.cfg.xml中加入配置

<property name="hibernate.current_session_context_class">thread</property>

修改hibernate工具類代碼

package com.yl.utils;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

/**
 * hibernate工具類
 */
public class HibernateUtils {
  private static SessionFactory sessionFactory;
  
  static {
    //加載配置文件
    Configuration cig = new Configuration().configure();
    //創(chuàng)建工廠
    sessionFactory = cig.buildSessionFactory();
  }

  /**
   * 獲取Session對(duì)象
   */
  public static Session getSession(){
    return sessionFactory.getCurrentSession();
  }
}

3、備注

建議使用方式二,將threadlocal交給hibernate管理,不用自己關(guān)閉。

4、注意事項(xiàng)

當(dāng)使用工廠創(chuàng)建對(duì)象時(shí),如果在工廠傳session,session不能定義為全局變量;因?yàn)槊總€(gè)線程都要有一個(gè)自己的session,建議在構(gòu)造方法調(diào)用工具類傳入session,不要在工廠傳session

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java線程中的常見(jiàn)方法(start方法和run方法)

    Java線程中的常見(jiàn)方法(start方法和run方法)

    這篇文章主要介紹了Java線程中的常見(jiàn)方法(start方法和run方法),文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • Java BufferedImage轉(zhuǎn)換為MultipartFile方式

    Java BufferedImage轉(zhuǎn)換為MultipartFile方式

    這篇文章主要介紹了Java BufferedImage轉(zhuǎn)換為MultipartFile方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Spring Boot Feign服務(wù)調(diào)用之間帶token問(wèn)題

    Spring Boot Feign服務(wù)調(diào)用之間帶token問(wèn)題

    這篇文章主要介紹了Spring Boot Feign服務(wù)調(diào)用之間帶token的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • MyBatis中的XML實(shí)現(xiàn)和動(dòng)態(tài)SQL實(shí)現(xiàn)示例詳解

    MyBatis中的XML實(shí)現(xiàn)和動(dòng)態(tài)SQL實(shí)現(xiàn)示例詳解

    這篇文章主要介紹了MyBatis中的XML實(shí)現(xiàn)和動(dòng)態(tài)SQL實(shí)現(xiàn),我們可以將XML中重復(fù)出現(xiàn)的內(nèi)容提取出來(lái)放到sql標(biāo)簽中,當(dāng)需要用到sql標(biāo)簽中的內(nèi)容時(shí),用include標(biāo)簽將sql標(biāo)簽中的內(nèi)容引進(jìn)來(lái)即可,感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 輕松掌握J(rèn)ava單例模式

    輕松掌握J(rèn)ava單例模式

    這篇文章主要幫助大家輕松掌握J(rèn)ava單例模式 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • Java消息隊(duì)列Kafka的簡(jiǎn)單概述

    Java消息隊(duì)列Kafka的簡(jiǎn)單概述

    這篇文章主要介紹了Java消息隊(duì)列Kafka的簡(jiǎn)單概述,消息系統(tǒng)負(fù)責(zé)將數(shù)據(jù)從一個(gè)應(yīng)用程序傳輸?shù)搅硪粋€(gè)應(yīng)用程序,應(yīng)用程序可以專注于數(shù)據(jù),不擔(dān)心如何共享它,需要的朋友可以參考下
    2023-07-07
  • 淺析Spring配置中的classpath:與classpath*:的區(qū)別

    淺析Spring配置中的classpath:與classpath*:的區(qū)別

    這篇文章主要介紹了Spring配置中的"classpath:"與"classpath*:"的區(qū)別,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-08-08
  • Spring、SpringMVC和SpringBoot的區(qū)別及說(shuō)明

    Spring、SpringMVC和SpringBoot的區(qū)別及說(shuō)明

    這篇文章主要介紹了Spring、SpringMVC和SpringBoot的區(qū)別及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。
    2022-10-10
  • SpringCloud Bus如何實(shí)現(xiàn)配置刷新

    SpringCloud Bus如何實(shí)現(xiàn)配置刷新

    這篇文章主要介紹了SpringCloud Bus如何實(shí)現(xiàn)配置刷新,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-09-09
  • Java8中LocalDateTime與時(shí)間戳timestamp的互相轉(zhuǎn)換

    Java8中LocalDateTime與時(shí)間戳timestamp的互相轉(zhuǎn)換

    這篇文章主要給大家介紹了關(guān)于Java8中LocalDateTime與時(shí)間戳timestamp的互相轉(zhuǎn)換,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03

最新評(píng)論