Spring 事务传播属性以及PROPAGATION_NESTED 和PROPAGATION_REQUIRES_NEW
2017-04-15 15:08
686 查看
spring的六种事务传播属性
PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY -- 支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW -- 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED -- 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER -- 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED -- 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
前六个策略类似于EJB CMT,第七个(PROPAGATION_NESTED)是Spring所提供的一个特殊
PROPAGATION_NESTED 和PROPAGATION_REQUIRES_NEW 区别
1. 开启事务的多少,PROPAGATION_REQUIRES_NEW会开启一个新事务,外部事务挂起,里面的事务独立执行。PROPAGATION_NESTED为父子事务,实际上是借助jdbc的savepoint实现的,属于同一个事物。
2. PROPAGATION_NESTED的回滚可以总结为,子事务回滚到savepoint,父事务可选择性回滚或者不不滚;父事务回滚子事务一定回滚。PROPAGATION_REQUIRES_NEW则是不同事物,嵌套事务之间没有必然联系是否回滚都由自己决定。
我的测试样例及结果
调用过程:
methodA(){
methodB();
}
一、 methodA PROPAGATION_REQUIRED
methodB PROPAGATION_REQUIRES
1. 若A回滚,B可以成功执行
2. 若B回滚,A catch异常可自行决定是否回滚,可作为分支处理(不推荐)
二、methodA PROPAGATION_REQUIRED
methodB PROPAGATION_NESTED
1. 若A回滚,一定回滚
2. 若B回滚,A catch异常可自行决定是否回滚,可作为分支处理(不推荐)
参考文档 http://blog.csdn.net/jjavaboy/article/details/45243565
PROPAGATION_REQUIRED -- 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS -- 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY -- 支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW -- 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED -- 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER -- 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED -- 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
前六个策略类似于EJB CMT,第七个(PROPAGATION_NESTED)是Spring所提供的一个特殊
PROPAGATION_NESTED 和PROPAGATION_REQUIRES_NEW 区别
1. 开启事务的多少,PROPAGATION_REQUIRES_NEW会开启一个新事务,外部事务挂起,里面的事务独立执行。PROPAGATION_NESTED为父子事务,实际上是借助jdbc的savepoint实现的,属于同一个事物。
2. PROPAGATION_NESTED的回滚可以总结为,子事务回滚到savepoint,父事务可选择性回滚或者不不滚;父事务回滚子事务一定回滚。PROPAGATION_REQUIRES_NEW则是不同事物,嵌套事务之间没有必然联系是否回滚都由自己决定。
我的测试样例及结果
调用过程:
methodA(){
methodB();
}
一、 methodA PROPAGATION_REQUIRED
methodB PROPAGATION_REQUIRES
1. 若A回滚,B可以成功执行
2. 若B回滚,A catch异常可自行决定是否回滚,可作为分支处理(不推荐)
二、methodA PROPAGATION_REQUIRED
methodB PROPAGATION_NESTED
1. 若A回滚,一定回滚
2. 若B回滚,A catch异常可自行决定是否回滚,可作为分支处理(不推荐)
参考文档 http://blog.csdn.net/jjavaboy/article/details/45243565
相关文章推荐
- Spring事务总结---传播级别以及REQUIRED_NEW及NESTED的使用场景(赞)
- spring事务 Propagation.REQUIRES_NEW、Propagation.NESTED、Propagation.REQUIRED使用时候发现的
- Spring事务总结---传播级别以及REQUIRED_NEW及NESTED的使用场景
- Spring事务传播问题 — PROPAGATION_REQUIRES_NEW
- REQUIRED、REQUIRES_NEW、NESTED 3个 spring 事务传播级别使用场景
- spring中事务传播解读:PROPAGATION_REQUIRES_NEW
- Spring事务总结---传播级别以及REQUIRED_NEW及NESTED的使用场景(赞)
- Spring事务处理,以及Spring事务的传播属性和隔离级别
- Spring事务 REQUIRES_NEW、NESTED与NOT_SUPPORTED
- Spring注解方式管理事务以及事务传播行为Propagation(视频笔记23)
- spring事务-说说Propagation及其实现原理(传播属性示例分析)
- 关于PROPAGATION_REQUIRES_NEW和PROPAGATION_NESTED事务的比较
- 事务457——spring事务注解Transactional的propagation传播属性使用
- spring 事务Propagation.REQUIRES_NEW 不起作用的原因
- Spring事务中Propagation.REQUIRES_NEW不起作用
- Spring事务传播机制-REQUIRES_NEW
- 事务457——spring事务注解Transactional的propagation传播属性使用
- spring的PROPAGATION_REQUIRES_NEW事务,下列说法正确的是(D)
- spring事务传播属性
- Spring 声明式事务,propagation属性列表