码迷,mamicode.com
首页 > 其他好文 > 详细

事务的传播行为

时间:2016-05-01 16:06:56      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

常见的事务传播行为主要有两种:REQUIRED 和 REQUIRES_NEW

  • REQUIRED
    • 当bookService 的purchase() 方法被另一个事务方法chechout() 调用时,它默认会在现有事务中运行,这个默认的传播行为就是REQUIRED。因此checkout() 方法的开始和终止边界内只有一个事务,这个事务只在checkout() 方法结束的时候被提交,结果用户一本书都买不了
    • 事务传播属性可以在这么定义:
      @Transactional(propagation = Propagation.REQUIRES_NEW,
      isolation=Isolation.READ_COMMITTED, readOnly=false, timeout=3)
      

      也可以通过 xml 的方式定义:

          <tx:advice id="txAdvice" transaction-manager="transactionManager">
              <tx:attributes>
                  <!-- 根据方法名指定事务的属性 -->
                  <tx:method name="purchase" propagation="REQUIRED"/>
                  <tx:method name="*"/>
              </tx:attributes>
          </tx:advice>
      

    只有一个事务,所以即便账户的余额够一本书,最后也会全部回滚:

技术分享  

  • REQUIRES_NEW
    • 表示该方法必须启动一个新事务,并在自己的事务内运行,如果有事务在运行,就必须将它挂起
    • 如图所示,当chechout 调用purchase 的时候,每一次调用 purchase, 都会起一个自己的事务,所以当账户余额够买一本书的时候,会购买成功。

              

技术分享 

事务的传播行为

标签:

原文地址:http://www.cnblogs.com/shi-yi-ge/p/5450607.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!