zoukankan      html  css  js  c++  java
  • Hibernate -- 配置c3p0连接池, 事务隔离级别, 管理session

    知识点1:配置c3p0连接池(了解)

    * 引入c3p0-0.9.1.jar

    * 在hibernate.cfg.xml文件中增加如下配置
    <!-- C3P0连接池设定-->
    <!-- 使用c3po连接池  配置连接池提供的供应商-->
    <property name="connection.provider_class">
        org.hibernate.connection.C3P0ConnectionProvider
    </property>
    <!--在连接池中可用的数据库连接的最少数目 -->
    <property name="c3p0.min_size">5</property>
    <!--在连接池中所有数据库连接的最大数目  -->
    <property name="c3p0.max_size">20</property>
    <!--设定数据库连接的过期时间,以秒为单位,
    如果连接池中的某个数据库连接处于空闲状态的时间超过了timeout时间,就会从连接池中清除 -->
    <property name="c3p0.timeout">120</property>
     <!--每3000秒检查所有连接池中的空闲连接 以秒为单位-->
    <property name="c3p0.idle_test_period">3000</property>
    <!-- 设置自动提交 -->
    <property name="connection.autocommit">true</property>
     

    知识点3:  ANSI 事务隔离级别

    设置隔离级别

    每个数据库连接都有默认的隔离级别,通常是读已提交或可重复读.可以通

    过数据库配置设置,也可在应用程序中设置.例如Hibernate:

    hibernate.connection.isolation = 4

    1—Read uncommitted isolation

    2—Read committed isolation

    4—Repeatable read isolation

    8—Serializable isolation

    注意:* Hibernate不可能改变在受管环境下由应用服务器提供的数据库连接的隔离级别,只能通过改变应用服务器配置的方式来改变.

        * 设置隔离级别是全局选项,会影响所有的连接和事务.有时需要为某个特定事务指定更多的限制.

        * Hibernate依赖于乐观的并发控制,使用版本检查和悲观锁实现附加的锁支.

    知识点4:管理session

    尽管让程序自主管理 Session对象的生命周期也是可行的,但是在实际Java 应用中,把管理Session对象的生命周期交给Hibernate管理,可以简化Java应用程序代码和软件架构
    Hibernate 3 自身提供了三种管理Session对象的方法
    Session 对象的生命周期与本地线程绑定
    Session 对象的生命周期与 JTA 事务绑定
    Hibernate 委托程序管理 Session 对象的生命周期
    Hibernate 的配置文件中, hibernate.current_session_context_class属性用于指定Session管理方式,可选值包括
    thread: Session对象的生命周期与本地线程绑定
    jta*: Session 对象的生命周期与 JTA 事务绑定
    managed: Hibernate委托程序来管理Session对象的生命周期
     
    如果把 Hibernate 配置文件的 hibernate.current_session_context_class属性值设为thread, Hibernate就会按照与本地线程绑定的方式来管理Session
    Hibernate 按以下规则把 Session 与本地线程绑定
    当一个线程(threadA)第一次调用SessionFactory对象的getCurrentSession()方法时,该方法会创建一个新的Session(sessionA)对象,把该对象与threadA绑定,并将sessionA 返回
    threadA再次调用SessionFactory对象的getCurrentSession()方法时,该方法将返回sessionA对象
    threadA提交sessionA对象关联的事务时, Hibernate会自动清理sessionA对象的缓存,然后提交事务,关闭sessionA 对象.threadA撤销 sessionA对象关联的事务时,也会自动关闭sessionA对象
    threadA再次调用SessionFactory对象的getCurrentSession()方法时,该方法会又创建一个新的Session(sessionB)对象,把该对象与threadA绑定,并将sessionB返回

    hibernate中如何配置

    *   hibernate.cfg.xml文件中增加

                <!-- 配置session的线程本地化threadLocal -->

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

     * 不是调用sessionFactory.openSession().而是调用sessionFactory.getCurrentSession().获取session对象.从当前的线程提取session,

               * 当前线程如果存在session对象,取出直接使用

               * 当前线程如果不存在session对象,获取一个新的session对象和当前的线程绑定

  • 相关阅读:
    warning MSB3245: 未能解析此引用。未能找到程序集“CemeteryBLL”。请检查磁盘上是否存在该程序集。 如果您的代码需要此引用,则可能出现编译错误。
    C#MVC中创建多模块web应用程序
    Visual Studio提示“无法启动IIS Express Web服务器”的解决方法
    未能找到 CodeDom 提供程序类型“Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.3.0, Culture=neutral, PublicKeyToken=31bf385
    WebHost failed to process a request.Memory gates checking failed because the free memory (140656640 bytes) is less than 5% of total memory
    wamp安装后打开默认网页显示dir,图标红点
    数字转为大写,钱转为大写格式
    SpringCloud
    Spring Boot
    双重校验锁 --使用volatile和两次判空校验
  • 原文地址:https://www.cnblogs.com/xj626852095/p/3647993.html
Copyright © 2011-2022 走看看