石狮网站设计公司,建行个人网上登录入口,龙岗网站建设找深一,ps做的网页怎么导入网站文章目录 说一下Spring的事务传播行为 今天来和大家聊聊spring中使用的事务传播行为#xff0c; 说一下Spring的事务传播行为
spring事务的传播行为说的是#xff0c;当多个事务同时存在的时候#xff0c;spring如何处理这些事务的行为。
① PROPAGATION_REQUIRED#xf… 文章目录 说一下Spring的事务传播行为 今天来和大家聊聊spring中使用的事务传播行为 说一下Spring的事务传播行为
spring事务的传播行为说的是当多个事务同时存在的时候spring如何处理这些事务的行为。
① PROPAGATION_REQUIRED默认的事务传播如果当前没有事务就创建一个新事务如果当前存在事务就加入该事务该设置是最常用的设置。
② PROPAGATION_SUPPORTS支持当前事务如果当前存在事务就加入该事务如果当前不存在事务就以非事务执行。
③ PROPAGATION_MANDATORY支持当前事务如果当前存在事务就加入该事务如果当前不存在事务就抛出异常。
④ PROPAGATION_REQUIRES_NEW创建新事务无论当前存不存在事务都创建新事务。
⑤ PROPAGATION_NOT_SUPPORTED以非事务方式执行操作如果当前存在事务就把当前事务挂起。
⑥ PROPAGATION_NEVER以非事务方式执行如果当前存在事务则抛出异常。
⑦ PROPAGATION_NESTED如果当前存在事务则在嵌套事务内执行。如果当前没有事务则按REQUIRED属性执行。
在一个事务执行的过程中调用另一个事务时候(比如一个service方法调用另一个service方法)这个事务将以何种状态存在是两个事务共存呢还是一个事务是另一个事务的子事务还是一个事务加入另一个事务的子事务呢……利用事务的传播性来解决这个问题。
1、REQUIRED: spring默认的事务的传播性 REQUIRED 表示如果当前存在事务则加入该事务如果当前没有事务则创建一个新的事务。
Service
public class AccountService {AutowiredJdbcTemplate jdbcTemplate;Transactionalpublic void handle1() {jdbcTemplate.update(update user set money ? where id?;, 1, 2);}
}
Service
public class AccountService2 {AutowiredJdbcTemplate jdbcTemplate;AutowiredAccountService accountService;public void handle2() {jdbcTemplate.update(update user set money ? where username?;, 1, zhangsan);accountService.handle1();}
}如果 handle2 方法本身是有事务的则 handle1 方法就会加入到 handle2 方法所在的事务中这样两个方法将处于同一个事务中一起成功或者一起失败不管是 handle2 还是 handle1 谁抛异常都会导致整体回滚。
如果 handle2 方法本身是没有事务的则 handle1 方法就会自己开启一个新的事务。
2、REQUIRES_NEW REQUIRES_NEW 表示创建一个新的事务如果当前存在事务则把当前事务挂起。换言之不管外部方法是否有事务REQUIRES_NEW 都会开启自己的事务。
3、NESTED NESTED 表示如果当前存在事务则创建一个事务作为当前事务的嵌套事务来运行如果当前没有事务则该取值等价于 TransactionDefinition.PROPAGATION_REQUIRED。
4、MANDATORY MANDATORY 表示如果当前存在事务则加入该事务如果当前没有事务则抛出异常。
5、SUPPORTS NOT_SUPPORTED 表示以非事务方式运行如果当前存在事务则把当前事务挂起。
6、NOT_SUPPORTED NOT_SUPPORTED 表示以非事务方式运行如果当前存在事务则把当前事务挂起。
7、NEVER NEVER 表示以非事务方式运行如果当前存在事务则抛出异常。