首页 > 编程语言 > 详细

【原创】spring中的事务传播特性

时间:2014-03-18 06:41:48      阅读:482      评论:0      收藏:0      [点我收藏+]

关于spring的传播特性,我对其进行了详细的叙述了下:

PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。

bubuko.com,布布扣
比如方法A调用方法B,如果方法A,B都使用该特性,那么A会开启事务,
执行到B的时候,B发现自己处于一个事务中,则会合并到该事务中和
A公用一个事务执行,弱任一异常会回滚整个事务,AB执行都失败。

若A未开启事务且未使用该特性,B使用该特性,B发现未处于一
个事务中,则会主动开启事务,只有B会使用事务,A不会。
bubuko.com,布布扣

 

PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。

bubuko.com,布布扣
方法AB,A调用B,A使用REQUIRED,会开启事务,B,使用SUPPORTS,则B会加入A的事务,若A未使用事务,则B也不使用事务。
bubuko.com,布布扣

 

PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。

bubuko.com,布布扣
方法AB,A【REQUIRED】调用B【SUPPORTS】,A如果有事务,则B会加入事务,若A没有事务,B会报错,B必须加入一个显示存在的事务,自己不能开启事务。
bubuko.com,布布扣

PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。

bubuko.com,布布扣
方法AB,A【REQUIRES_NEW】调用B【REQUIRES_NEW】,那么执行到B时,A事务会挂起,B会开启一个新的事务。A和B处于完全不同的两个事务之中。
bubuko.com,布布扣

PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

bubuko.com,布布扣
方法AB,A【REQUIRED】调用B【NOT_SUPPORTED】,B会挂起A事务,然后B不使用事务执行,也就是和A异步错开执行。
bubuko.com,布布扣

 

PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。

bubuko.com,布布扣
不允许在事务内执行,否则抛出异常。
bubuko.com,布布扣

 

PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

A调用B,A【REQUIRED】调用B【NESTED】,此时B会作为嵌套事务开始执行,所谓嵌套事务,实际上就是加入A的事务和A使用一个事务,只是使用savepoint,如果B执行失败,会回滚到savepoint,然后A根据配置决定是回滚还是继续执行,这样就产生分支执行的情况。如B失败回滚,A可以在异常处理catch中继续未完成的操作。

1.要设置 transactionManager nestedTransactionAllowed 属性为 true。

2.

【原创】spring中的事务传播特性,布布扣,bubuko.com

【原创】spring中的事务传播特性

原文:http://www.cnblogs.com/zhangxsh/p/3575441.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!