session和线程绑定

将session和线程绑定,一个Session对应一个线程

方法一:

  修改工具类

public class HibernateUtils {
    private static SessionFactory factory;
    private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();

    static{
        try {
            Configuration configuration=new Configuration();
            configuration.configure("hibernate.cmd.xml");
            factory = configuration.buildSessionFactory();
        }catch (ExceptionInInitializerError e){
            throw new ExceptionInInitializerError("初始化SessionFactory失败,请检查配置文件");
        }
    }

    public static Session getSession(){
        Session s=threadLocal.get();
        if (s==null) {
            threadLocal.set(factory.openSession());
        }
        s=threadLocal.get();
        return s;
    }
}public class HibernateUtils {
    private static SessionFactory factory;
    private static ThreadLocal<Session> threadLocal=new ThreadLocal<Session>();

    static{
        try {
            Configuration configuration=new Configuration();
            configuration.configure("hibernate.cmd.xml");
            factory = configuration.buildSessionFactory();
        }catch (ExceptionInInitializerError e){
            throw new ExceptionInInitializerError("初始化SessionFactory失败,请检查配置文件");
        }
    }

    public static Session getSession(){
        Session s=threadLocal.get();
        if (s==null) {
            threadLocal.set(factory.openSession());
        }
        s=threadLocal.get();
        return s;
    }
}

方法一:

  修改配置文件,工具类添加新方法

  <!--绑定线程和session,实现一个session只有一个线程。-->
  <property name="hibernate.current_session_context_class">thread</property>
/**
     *从线程上获取session
     * 配置了线程和session绑定,才能用
     * @return
     */
    public static Session getCurrnetSession(){
        return factory.getCurrentSession();
    }

  

/**  当Session和线程绑定后,hibernate,会在事务提交后自动关闭session **/

原文地址:https://www.cnblogs.com/jasonjson/p/12430872.html

时间: 2024-08-30 15:13:10

session和线程绑定的相关文章

[原创]java WEB学习笔记94:Hibernate学习之路---session 的管理,Session 对象的生命周期与本地线程绑定

本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱好者,互联网技术发烧友 微博:伊直都在0221 QQ:951226918 -----------------------------------------------------------------------------------------------------------------

Hibernate中Session与本地线程绑定

------------------siwuxie095 Hibernate 中 Session 与本地线程绑定 1.Session 类似于 JDBC 的连接 Connection 2.Session 对象是单线程对象,只能自己使用,不能共用 将 Session 与本地线程绑定,保证 Session 对象绝对是一个单线程对象 3.Hibernate 帮助我们实现了 Session 与本地线程绑定(底层是 ThreadLocal) 4.获取与本地线程绑定的 Session (1)在 Hiberna

Spring基于ThreadLocal的“资源-事务”线程绑定设计的缘起

题目起的有些拗口了,简单说,这篇文章想要解释Spring为什么会选择使用ThreadLocal将资源和事务绑定到线程上,这背后有着什么样的起因和设计动机,通过分析帮助大家更清晰地认识Spring的线程绑定机制.本文原文链接:http://blog.csdn.net/bluishglc/article/details/7784502 转载请注明出处! “原始”的数据访问写法 访问任何带有事务特性的资源系统,像数据库,都有着相同的特点:首先你需要获得一个访问资源的“管道”,对于数据库来说,这个所谓的

Linux进程或线程绑定到CPU

Linux进程或线程绑定到CPU 为了让程序拥有更好的性能,有时候需要将进程或线程绑定到特定的CPU,这样可以减少调度的开销和保护关键进程或线程. 进程绑定到CPU Linux提供一个接口,可以将进程绑定到特定的CPU: #include <sched.h> int sched_setaffinity(pid_t pid, size_t cpusetsize, const cpu_set_t *mask); int sched_getaffinity(pid_t pid, size_t cpu

JAVA学习篇--ThreadLocal,Java中特殊的线程绑定机制

在DRP项目中,我们使用了ThreadLocal来创建Connection连接,避免了一直以参数的形式将Connection向下传递(传递connection的目的是由于jdbc事务要求确保使用同一个connection连接).那么ThreadLocal是如果做到的呢?它和同步锁的不同在哪里? 是什么: 对于ThreadLocal看英文单词我们很容易理解为一个线程的本地实现,但是它并不是一个Thread,而是threadlocalvariable(线程局部变量).也许把它命名为ThreadLoc

linux下将不同线程绑定到不同core和cpu上——pthread_setaffinity_np

=============================================================== linux下的单进程多线程的程序,要实现每个线程平均分配到多核cpu,主要有2个方法 1:利用linux系统自己的线程切换机制,linux有一个服务叫做irqbalance,这个服务是linux系统自带的,默认会启动,这个服务的作用就是把多线程平均分配到CPU的每个核上面,只要这个服务不停止,多线程分配就可以自己实现.但是要注意,如果线程函数内部的有某个循环,且该循环内

Java-ThreadLocal,Java中特殊的线程绑定机制

在DRP项目中,我们使用了ThreadLocal来创建Connection连接,避免了一直以参数的形式将Connection向下传递(传递connection的目的是由于jdbc事务要求确保使用同一个connection连接).那么ThreadLocal是如果做到的呢?它和同步锁的不同在哪里? 是什么: 对于ThreadLocal看英文单词我们很容易理解为一个线程的本地实现,但是它并不是一个Thread,而是threadlocalvariable(线程局部变量).也许把它命名为ThreadLoc

Linux编程之《进程/线程绑定CPU》

Intro----- 通常我们在编写服务器代码时,可以通过将当前进程绑定到固定的CPU核心或者线程绑定到固定的CPU核心来提高系统调度程序的效率来提高程序执行的效率,下面将完整代码贴上.```/************************************************ * 该例程讲解了进程.线程绑定到固定的cpu核心上运行 * 来提高程序运行效率************************************************/#include <unistd

ThreadLocal(线程绑定)

为保证在DAO层里的操作都在同一事务里,我们曾使用以参数的形式将Connection向下传递的方式,而ThreadLocal来创建Connection连接,避免了一直以参数的形式将Connection向下传递(传递connection的目的是由于jdbc事务要求确保使用同一个connection连接).那么ThreadLocal是如果做到的呢?它和同步锁的不同在哪里? 是什么: 对于ThreadLocal看英文单词我们很容易理解为一个线程的本地实现,但是它并不是一个Thread,而是thread