码迷,mamicode.com
首页 > 编程语言 > 详细

Spring事务的传播级别

时间:2020-07-04 18:51:18      阅读:84      评论:0      收藏:0      [点我收藏+]

标签:ati   col   如何   默认   依赖   something   一个   ubi   nsa   

@Transactional(propagation=PROPAGATION_REQUIRED)
pubilc void methodA(){
        doPreSomething;
        methodB();
        doSufSomething;
}

@Transactional(propagation=PROPAGATION_REQUIRED)
@Transactional(propagation=PROPAGATION_REQUIRED_NEW)
@Transactional(propagation=PROPAGATION_SUPPORTS)
@Transactional(propagation=PROPAGATION_NOT_SUPPORTED)
@Transactional(propagation=PROPAGATION_MANDATORY)
@Transactional(propagation=PROPAGATION_NEVER)
@Transactional(propagation=PROPAGATION_NESTED)
pubilc void methodB(){
        doSomething;
} 

1. PROPAGATION_REQUIRED_NEW 无论如何都新建一个事务,与其他事务间互不影响。(始终独立成事务)
若嵌套执行的方法要求各自事务独立,互不影响,则选择本传播级别。

2. PROPAGATION_REQUIRED(默认) 可单独成一事务。若被其他事务包裹则加入该事务,成为其一部分。(平等加入,独立亦可成事务)
若嵌套执行的方法要求一起成功或者回滚,则选择本传播级别。

3. PROPAGATION_SUPPORTS 单独不能成事务,只能依赖其他事务,成为其事务的一部分。(依赖加入,独立不能成事务)
若嵌套执行的方法要求一起成功或者回滚,单独执行时候以非事务方式执行,则选择本事物级别。

4. PROPAGATION_MANDATORY 只能成为其他事务的一部分,单纯执行将报错。(强制加入,独立不可执行。)
若嵌套执行的方法要求一起执行成功或者一起回滚,不允许以不被事务包裹方式执行,则选择该事物传播级别。

5. PROPAGATION_NESTED 如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行,否则,就启动一个新的事务,并在它自己的事务内运行。(巢筑,独立亦可成事务)
若嵌套执行的方法要求内部方法出错只回滚自己,外部方法执行失败回滚所有,单独执行时候自动开启一个执行,则选择该事物传播级别。

6. PROPAGATION_NOT_SUPPORTED 被事务包裹则挂起执行,不影响事务,单独执行时候亦以非事务方式执行。(可被吞并,始终不支持事务。)
若嵌套执行的方法要求内部嵌套方法不会对外部方法事务造成影响并且内部方法不需要事务,单独执行时候亦以非事务方式执行,则选择该事物传播级别。

7. PROPAGATION_NEVER 被事务强制包裹则抛出异常,单独执行时候必须以非事务方式执行。(不可被吞并,始终不支持事务。)
若嵌套执行的方法要求内部方法不允许在事务中执行,单独执行时候必须以非事务方式执行,则选择该事物传播级别。

Spring事务的传播级别

标签:ati   col   如何   默认   依赖   something   一个   ubi   nsa   

原文地址:https://www.cnblogs.com/shijianchuzhenzhi/p/13235825.html

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