事务的传播特性
2017-07-20 09:34
190 查看
事务的传播特性是类与类之间方法的传播:
<!-- 可以看出spring给我们封装了通知类,它调用事务管理器 -->
<tx:advice id="txadvice" transaction-manager="transaction">
<tx:attributes>
<!--
isolation:事务的隔离级别
- DEFAULT 获取数据库的隔离级别
- READ_UNCOMMITTED 读未提交数据。脏读、不可重复读、幻读都可能发生。它的事务隔离性最低。
- READ_COMMITTED 读已提交数据。不允许脏读。
- REPEATABLE_READ 可重复读。不允许不可重复读,脏读。
- SERIALIZABLE :串行化。不允许任何并发事务问题。最严格的事务隔离性。
隔离级别越高,效率越低
propagation: 事务的传播特性,方法与方法的调用,处理事务问题
- REQUIRED :必须存在一个事务(父方法),子方法有或没有,使用父方法的事务,子方法和父方法同一个事务
- SUPPORTS
- MANDATORY
- REQUIRES_NEW
- NOT_SUPPORTED
- NEVER
- NESTED
- REQUIRED (spring 默认的传播特性)
必须存在一个事务 如果没有事务 创建一个事务 如果父方法存在事务使用父方法的事务
- REQUIRES_NEW
必须存在一个事务 不管有没有事务都要自己创建一个事务,将父类的事务挂起。
- SUPPORTS
不会创建事务 如果有事务在事务中运行 没有事务 不使用事务
- MANDATORY(必须存在事务)
不会创建事务 有事务 使用当前事务 没有事务跑出 错误状态异常
- NEVER (不能存在事务)
不会创建事务 没有事务正常运行 有事务抛出异常
- NOT_SUPPORTED
不支持事务 如果存在事务就挂起 没有事务正常运行
- NESTED (少用)
嵌套异常 不同的数据源之间的事务处理 相同的数据 就是 REQUIRED
spring tx事务处理中 只有运行时异常才会自动回滚数据
rollback-for 指定需要回滚的非运行时异常
no-rollback-for="" 指定不需要回滚的运行时异常
timeout="-1" 会一直等待数据操作完成
默认的单位是s()
read-only="true" 该方法不使用事务
-->
<!-- 开启一个事务的含义(给拦截的方法):交给事务管理器,setAutoCommit(false),方法结束时提交,出现异常回滚
(这些通知都是spring定义好的,不需要我们管理) -->
<!-- 不设propagation属性,默认REQUIRED
<tx:method name="subMoney" isolation="DEFAULT"/> 就不交给事务管理器,自动提交(出现错误也不会回滚)
-->
<tx:method name="subMoney" isolation="DEFAULT" propagation="REQUIRED" rollback-for="java.io.IOException"/>
<tx:method name="addMoney" isolation="DEFAULT" propagation="REQUIRED"/>
<!-- 可以看出spring给我们封装了通知类,它调用事务管理器 -->
<tx:advice id="txadvice" transaction-manager="transaction">
<tx:attributes>
<!--
isolation:事务的隔离级别
- DEFAULT 获取数据库的隔离级别
- READ_UNCOMMITTED 读未提交数据。脏读、不可重复读、幻读都可能发生。它的事务隔离性最低。
- READ_COMMITTED 读已提交数据。不允许脏读。
- REPEATABLE_READ 可重复读。不允许不可重复读,脏读。
- SERIALIZABLE :串行化。不允许任何并发事务问题。最严格的事务隔离性。
隔离级别越高,效率越低
propagation: 事务的传播特性,方法与方法的调用,处理事务问题
- REQUIRED :必须存在一个事务(父方法),子方法有或没有,使用父方法的事务,子方法和父方法同一个事务
- SUPPORTS
- MANDATORY
- REQUIRES_NEW
- NOT_SUPPORTED
- NEVER
- NESTED
- REQUIRED (spring 默认的传播特性)
必须存在一个事务 如果没有事务 创建一个事务 如果父方法存在事务使用父方法的事务
- REQUIRES_NEW
必须存在一个事务 不管有没有事务都要自己创建一个事务,将父类的事务挂起。
- SUPPORTS
不会创建事务 如果有事务在事务中运行 没有事务 不使用事务
- MANDATORY(必须存在事务)
不会创建事务 有事务 使用当前事务 没有事务跑出 错误状态异常
- NEVER (不能存在事务)
不会创建事务 没有事务正常运行 有事务抛出异常
- NOT_SUPPORTED
不支持事务 如果存在事务就挂起 没有事务正常运行
- NESTED (少用)
嵌套异常 不同的数据源之间的事务处理 相同的数据 就是 REQUIRED
spring tx事务处理中 只有运行时异常才会自动回滚数据
rollback-for 指定需要回滚的非运行时异常
no-rollback-for="" 指定不需要回滚的运行时异常
timeout="-1" 会一直等待数据操作完成
默认的单位是s()
read-only="true" 该方法不使用事务
-->
<!-- 开启一个事务的含义(给拦截的方法):交给事务管理器,setAutoCommit(false),方法结束时提交,出现异常回滚
(这些通知都是spring定义好的,不需要我们管理) -->
<!-- 不设propagation属性,默认REQUIRED
<tx:method name="subMoney" isolation="DEFAULT"/> 就不交给事务管理器,自动提交(出现错误也不会回滚)
-->
<tx:method name="subMoney" isolation="DEFAULT" propagation="REQUIRED" rollback-for="java.io.IOException"/>
<tx:method name="addMoney" isolation="DEFAULT" propagation="REQUIRED"/>
相关文章推荐
- 事务的传播特性
- spring事务传播特性
- spring 的事务传播特性与事务的隔离级别
- spring的事务的传播特性
- 事务的传播特性
- Spring事务的传播特性和隔离级别
- Spring事务的传播特性以及事务的隔离级别
- Spring事务的传播特性
- 与hibernate的集成:声明式事务.事务的传播特性等.
- Spring事务传播特性实例解析
- spring 配置事务传播特性
- 传智播客 srping的AOP简介与事务传播特性总结
- Spring事务的传播特性和隔离级别
- 事务的几种传播特性
- Spring事务的传播特性和隔离级别
- spring的事务的传播特性
- Spring事务传播特性
- Spring整合Hibernate,事务的几种传播特性,数据库事务隔离级别(脏读幻读不可重复读)
- Spring 管理事务(传播特性、隔离级别、readonly)
- 事务的7种传播特性