事务管理的五种方法.docx_第1页
事务管理的五种方法.docx_第2页
事务管理的五种方法.docx_第3页
事务管理的五种方法.docx_第4页
事务管理的五种方法.docx_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

前段时间对Spring的事务配置做了比较深入的研究,在此之间对Spring的事务配置虽说也配置过,但是一直没有一个清楚的认识。通过这次的学习发觉Spring的事务配置只要把思路理清,还是比较好掌握的。 总结如下: Spring配置文件中关于事务配置总是由三个组成部分,分别是DataSource、TransactionManager和代理机制这三部分,无论哪种配置方式,一般变化的只是代理机制这部分。 DataSource、TransactionManager这两部分只是会根据数据访问方式有所变化,比如使用Hibernate进行数据访问时,DataSource实际为SessionFactory,TransactionManager的实现为HibernateTransactionManager。 具体如下图:根据代理机制的不同,总结了五种Spring事务的配置方式,配置文件如下: 第一种方式:每个Bean都有一个代理 PROPAGATION_REQUIRED 第二种方式:所有Bean共享一个代理基类 PROPAGATION_REQUIRED 第三种方式:使用拦截器 PROPAGATION_REQUIRED *Dao transactionInterceptor 第四种方式:使用tx标签配置的拦截器 第五种方式:全注解 package com.bluesky.spring.dao;import java.util.List;import org.hibernate.SessionFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.orm.hibernate3.support.HibernateDaoSupport;import org.springframework.stereotype.Component;import com.bluesky.spring.domain.User;TransactionalComponent(userDao)publicclass UserDaoImpl extends HibernateDaoSupport implements UserDao public List listUsers() returnthis.getSession().createQuery(from User).list(); 注意的几点:1、Transactional只能被应用到public方法上,对于其他非public的方法,如果标记了Transactional也不会报错,但方法没有事务功能。2、默认情况下,一个有事务方法,遇到RuntimeException时会回滚,遇到受检查的异常是不会回滚的。要想所有异常都回滚,要加上Transactional(rollbackFor=Exception.class, 其他异常)。Transactional的所有可选属性如下:属性 类型 默认值说明propagation Propagation枚举 REQUIRED 事务传播属性(下有说明)isolation isolation枚举 DEFAULT 事务隔离级别(另有说明)readOnly boolean false是否只读timeout int -1 超时(秒)rollbackFor Class 需要回滚的异常类rollbackForClassName String 需要回滚的异常类名noRollbackFor Class 不需要回滚的异常类noRollbackForClassName String 不需要回滚的异常类名事务的隔离级别 有如下可选:可以去看spring的源代码:org.springframework.transaction.annotation.IsolationDEFAULT 采用数据库默认隔离级别READ_UNCOMMITTEDREAD_COMMITTEDREPEATABLE_READSERIALIZABLE事务的传播属性,有如下可选:可以去看spring的源代码:org.springframework.transaction.annotation.PropagationREQUIRED:业务方法需要在一个事务中运行,如果方法运行时,已处在一个事务中,那么就加入该事务,否则自 己创建一个新的事物,这是spring默认的传播行为。SUPPORTS:如果业务方法在某个事物范围内被调用,则方法成为该事务的一部分,如果业务方法在事务范围外被 调用,则方法在没有事务的环境下执行。MANDATORY:只能在一个已存在事务中执行,业务方法不能发起自己的事物,如果业务方法在没有事务的环境下 调用,就抛异常。REQUIRES_NEW:业务方法总是会为自己发起一个新的事务,如果方法已运行在一个事务中,则原有方法被挂起, 新的事务被创建,直到方法结束,新事务才结束,原先的事务才会恢复执行。NOT_SUPPORTED:声明方法需要事务,如果方法没有关联到一个事务,容器不会为他开启事务,如果方法在一个 事务中被调用,该事务会被挂起,在方法调用结束后,原先的事务便会恢复执行。NEVER:声明方法绝对不能在事务范围内执行,如果方法在某个事务范围内执行,容器就抛异常,只有没关联到 事务,才正常执行。NE

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论