Hibernate -- 配置c3p0连接池, 事务隔离级别, 管理session
2014-02-28 10:22
465 查看
知识点1:配置c3p0连接池(了解)
* 引入c3p0-0.9.1.jar
知识点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对象和当前的线程绑定
* 引入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对象和当前的线程绑定
相关文章推荐
- Hibernate -- 配置c3p0连接池, 事务隔离级别, 管理session
- Hibernate 中配置C3P0连接池
- Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP。在配置连接池时需要注意的有三点
- hibernate.cfg.xml 配置 & C3P0 连接池配置
- Hibernate中配置C3P0连接池
- 关于hibernate配置c3p0连接池连接mysql问题
- Spring+Hibernate 配置和使用c3p0和proxool连接池
- Hibernate中配置C3P0连接池
- spring+hibernate的c3p0 连接池配置 转
- Hibernate中配置C3P0连接池
- Spring c3p0连接池通过Hibernate配置
- Hibernate中配置C3P0连接池
- Hibernate中配置C3P0连接池
- Spring+Hibernate的连接池配置(c3p0,proxool)
- 数据库的连接池的原理与Hibernate的内置连接池及C3P0的配置
- hibernate配置c3p0连接池
- Hibernate中配置C3P0连接池
- spring声明式事物管理配置和对c3p0连接池的详细配置
- hibernate 3.* C3P0配置 以及为什么需要连接池!
- Hibernate中配置C3P0连接池