zoukankan      html  css  js  c++  java
  • Hibernate第十一篇【配置C3P0数据库连接池、线程Session】

    Hibernate连接池

    Hibernate自带了连接池,但是呢,该连接池比较简单..而Hibernate又对C3P0这个连接池支持…因此我们来更换Hibernate连接池为C3P0

    查看Hibernate自带的连接池

    我们可以通过Hibernate.properties文件中查看Hibernate默认配置的连接池

    hibernate.properties的配置文件可以在projectetc找到

    Hibernate的自带连接池啥都没有,就一个连接数量为1

    这里写图片描述


    查看Hibernate对C3P0的支持

    • #hibernate.c3p0.max_size 2 最大连接数
    • #hibernate.c3p0.min_size 2 最小连接数
    • #hibernate.c3p0.timeout 5000 超时时间
    • #hibernate.c3p0.max_statements 100 最大执行的命令的个数
    • #hibernate.c3p0.idle_test_period 3000 空闲测试时间
    • #hibernate.c3p0.acquire_increment 2 连接不够用的时候, 每次增加的连接数
    • #hibernate.c3p0.validate false

    这里写图片描述

    修改Hibernate连接池

    我们在hibernate.cfg.xml中配置C3p0,让C30P0作为Hibernate的数据库连接池

    查找Hibernate支持的连接池组件有什么

    这里写图片描述

    既然找到了,那么我们在hibernate.cfg.xml中配置对应的类就和相关配置就行了

    
            <!-- 【连接池配置】 -->
            <!-- 配置连接驱动管理类 -->
            <property name="hibernate.connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</property>
            <!-- 配置连接池参数信息 -->
            <property name="hibernate.c3p0.min_size">2</property>
            <property name="hibernate.c3p0.max_size">4</property>
            <property name="hibernate.c3p0.timeout">5000</property>
            <property name="hibernate.c3p0.max_statements">10</property>
            <property name="hibernate.c3p0.idle_test_period">30000</property>
            <property name="hibernate.c3p0.acquire_increment">2</property>

    线程Session

    我们创建Session的时候,有两个方法

    • openSession()【每次都会创建新的Session】
    • getCurrentSession()【获取当前线程的Session,如果没有则创建】

    一般地,我们使用线程Session比较多

    如果要使用getCurrentSession(),需要在配置文件中配置:

            <!--配置线程Session-->
            <property name="hibernate.current_session_context_class">thread</property>

    测试数据

    
    @Test
        public void testSession() throws Exception {
            //openSession:  创建Session, 每次都会创建一个新的session
            Session session1 = sf.openSession();
            Session session2 = sf.openSession();
            System.out.println(session1 == session2);
            session1.close();
            session2.close();
    
            //getCurrentSession 创建或者获取session
            // 线程的方式创建session  
            // 一定要配置:<property name="hibernate.current_session_context_class">thread</property>
            Session session3 = sf.getCurrentSession();// 创建session,绑定到线程
            Session session4 = sf.getCurrentSession();// 从当前访问线程获取session
            System.out.println(session3 == session4);
    
            // 关闭 【以线程方式创建的session,可以不用关闭; 线程结束session自动关闭】
            //session3.close();
            //session4.close(); 报错,因为同一个session已经关闭了!
        }
  • 相关阅读:
    【转】常用 Java 静态代码分析工具的分析与比较
    转-SQL Server系列-我感觉自己不用写了,很清晰很有条理
    转-SQL Server Alwayson概念总结
    超级快的python vibora.io框架
    [转]做超炫图表,数据可视化的优雅实现方案 (硬核科普)
    统计资料下载论坛
    [FW]Windows7 Python-3.6 安装PyCrypto(pycrypto 2.6.1)出现错误以及解决方法
    国内外常用公共NTP网络时间服务器
    HTTP Error 500.24
    step7 microwin v4.0 sp9 win7 64位首次安装s7-200的软件,首次使用西门子软件,每次提示这个信息,怎么解决,网上有说,倒入注册表信息,按照下图进行操作还是不行,求各位高手指点一下,谢谢!
  • 原文地址:https://www.cnblogs.com/zhong-fucheng/p/7202959.html
Copyright © 2011-2022 走看看