您的位置:首页 > 其它

事务的传播特性

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"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: