在service类前加上@Transactional,声明这个service所有方法需要事务管理。每一个业务方法开始时都会打开一个事务。

Spring默认情况下会对运行期例外(RunTimeException)进行事务回滚。这个例外是unchecked,如果遇到checked意外就不回滚。

如何改变默认规则:

1、让checked例外也回滚:在整个方法前加上 @Transactional(rollbackFor=Exception.class)

2、 让unchecked例外不回滚: @Transactional(notRollbackFor=RunTimeException.class)

3、 不需要事务管理的(只查询的)方法:@Transactional(propagation=Propagation.NOT_SUPPORTED)

注意: 如果异常被try{}catch{},事务就不回滚了,如果想让事务回滚必须再往外抛try{}catch{throw Exception}

@Transactional设置:

propagation:事务传播性设置,Propagation枚举类型,事务默认为:Propagation.REQUIRED。Spring支持的事务传播属性包括7种:

PROPAGATION_MANDATORY:方法必须在事务中执行,否则抛出异常。

PROPAGATION_NESTED:使方法运行在嵌套事务中,否则和PROPAGATION_REQUIRED一样。

PROPAGATION_NEVER :当前方法永远不在事务中运行,否则抛出异常。

PROPAGATION_NOT_SUPPORTED:定义为当前事务不支持的方法,在该方法执行期间正在运行的事务会被暂停

PROPAGATION_REQUIRED:当前的方法必须运行在事务中,如果没有事务就新建一个事务。新事务和方法一起开始,随着方法返回或者抛出异常时终止。

PROPAGATION_REQUIRED_NEW :当前方法必须新建一个事务,如果当前的事务正在运行则暂停。

PROPAGATION_SUPPORTS :规定当前方法支持当前事务,但是如果没有事务在运行就使用非事务方法执行。

isolation:事务隔离性级别设置,Isolation枚举类型

ISOLATION_DEFAULT :使用数据库默认的隔离级别

ISOLATION_COMMITTED:允许其他事务已经提交的更新(防止脏读取)

ISOLATION_READ_UNCOMMITTED:允许读取其他事务未提交的更新,会导致三个缺陷发生。执行速度最快

ISOLATION_REPEATABLE_READ :除非事务自身更改了数据,否则事务多次读取的数据相同(防止脏数据,多次重复读取)

ISOLATION_SERIALIZABLE:隔离级别最高,可以防止三个缺陷,但是速度最慢,影响性能。

readOnly:读写性事务,只读性事务,布尔型

对数据库的操作中,查询是使用最频繁的操作,每次执行查询时都要从数据库中重新读取数据,有时多次读取的数据都是相同的,这样的数据操作不仅浪费了系统资源,还影响了系统速度。对访问量大的程序来说,节省这部分资源可以大大提    升系统速度。

将事务声明为只读的,那么数据库可以根据事务的特性优化事务的读取操作

timeout:超时时间,单位秒

事务可能因为某种原因很长时间没有反应,这期间可能锁定了数据库表,影响性能。设置超时时间,如果超过该时间,事务自动回滚。

rollbackFor:一组异常类的实例,遇到时必须进行回滚

rollbackForClassname:一组异常类的名字,遇到时必须进行回滚

noRollbackFor:一组异常类的实例,遇到时必须不回滚

noRollbackForClassname:一组异常类的名字,遇到时必须不回滚

本文转自:http://blog.chinaunix.net/uid-20586655-id-3370000.html

最新文章

  1. [转] IIS配置文件的XML格式不正确 applicationHost.config崩溃 恢复解决办法
  2. 判断一个Activity 判断一个包 是否存在于系统中 的方法
  3. 简明python教程 --C++程序员的视角(八):标准库
  4. Linux 如何设置只允许域名访问站点而禁止IP访问站点
  5. The type xxx cannot be resolved. It is indirectly referenced from required .class files
  6. codeforces 630F Selection of Personnel(组合数)
  7. Android 设置EditText光标位置
  8. SQLServer与Oracle的数据同步(触发器trigger)
  9. POJ 3393 Lucky and Good Months by Gregorian Calendar 模拟题
  10. malloc(0)的问题
  11. gitlab与jenkins的自动化部署(通过webhook与ansilble)
  12. xBIM 使用Linq 来优化查询
  13. Pat1071: Speech Patterns
  14. Java 范例 - 字节处理
  15. Selenium之WebDriver元素定位方法
  16. [蓝桥] 基础练习 十进制转十六进制 (java)
  17. 函数防抖(Debounce)、函数节流 (Throttle)
  18. Echart实现多个y轴,坐标轴的个数及名称由后台传过来的json数据决定。
  19. centOS配置国内镜像
  20. 请比较throw 合throws的区别

热门文章

  1. TZOJ 5347: 数据结构实验:删除链表元素
  2. linux-去重-uniq
  3. zk介绍
  4. pl/sql游标
  5. IOS AppUI规格指南
  6. jQuery (DOM篇)
  7. 详解CSS的相对定位和绝对定位(讲得很详细)
  8. Spring 配置dataSource和sessionFactory
  9. Linux 平台如何查看某个进程的线程数?
  10. 《深入理解Nginx:模块开发与架构解析》(一)