Spring事务管理中propagation="REQUIRED"

本文重点讲一讲propagation参数,propagation配置的就是一个事务的传播性问题。

 所谓事务传播性,就是被调用者的事务与调用者的事务之间的关系。举例说明。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
//in A.java
Class A {
     @Transactional (propagation=propagation.REQUIRED)
     public void aMethod {
         B b = new B();
         b.bMethod();
     }
}
 
//in B.java
Class B {
     @Transactional (propagation=propagation.REQUIRED)
     public void bMethod { //something }
}

  在上面这个例子中,传播性被设为了REQUIRED,注意,这是默认值,也即不进行该参数配置等于配置成REQUIRED。

  REQUIRED的含义是,支持当前已经存在的事务,如果还没有事务,就创建一个新事务。在上面这个例子中,假设调用aMethod前不存在任何事务,那么执行aMethod时会自动开启一个事务,而由aMethod调用bMethod时,由于事务已经存在,因此会使用已经存在的事务(也就是执行aMethod之前创建的那个事务)。

  对于这样的配置,如果bMethod过程中发生异常需要回滚,那么aMethod中所进行的所有数据库操作也将同时被回滚,因为这两个方法使用了同一个事务。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
@propagation=Propagation.REQUIREDSpring框架的一个事务传播属性设置。它表示当前方法必须在一个事务运行,如果当前已存在一个事务,则加入该事务,如果当前没有事务,则创建一个新的事务。 在引用的例子,@Transactional(propagation = Propagation.REQUIRED)表示该方法需要在一个事务运行,如果当前已存在事务,则加入该事务,如果当前没有事务,则创建一个新的事务。 在引用的例子,<tx:method name="*" propagation="REQUIRED"/>表示所有以"update"开头的方法和"delete"开头的方法都需要在一个事务运行。 在引用的例子,@Transactional(propagation = Propagation.REQUIRED, rollbackFor = Exception.class)表示该方法需要在一个事务运行,并且在遇到Exception异常时进行回滚。 总结起来,@propagation=Propagation.REQUIRED用于设置方法在事务的运行方式,保证方法的执行在一个事务进行。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [@Transactional(propagation=Propagation.REQUIRED)数据库事务的7种传播行为特性](https://blog.csdn.net/m0_37899908/article/details/112797314)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Maven拆分代码.zip](https://download.csdn.net/download/qq_41344974/12471931)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [@Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)也会导致死锁吗...](https://blog.csdn.net/weixin_43716742/article/details/124433561)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值