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对象和当前的线程绑定

 

转载于:https://www.cnblogs.com/xj626852095/p/3647993.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值