Spring中七种Propagation类的事务属性详解:

       在声明式的事务处理中,要配置一个切面,其中就用到了propagation,表示打算对这些方法怎么使用事务,是用还是不用,其中propagation有七种配置,REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER、NESTED。默认是REQUIRED。

       Spring中七种Propagation类的事务属性详解:

REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。  
SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。  
MANDATORY:支持当前事务,如果当前没有事务,就抛出异常。  
REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。  
NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。  
NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。  
NESTED:支持当前事务,如果当前事务存在,则执行一个嵌套事务,如果当前没有事务,就新建一个事务。

注意:这个配置将影响数据存储,必须根据情况选择。

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
Spring事务的传播行为指的是一个事务方法调用另一个事务方法时,事务如何传播的行为。Spring框架提供了7种事务传播行为,分别是REQUIRED、SUPPORTS、MANDATORY、REQUIRES_NEW、NOT_SUPPORTED、NEVER和NESTED。 1. REQUIRED 如果当前没有事务,则创建一个新事务。如果当前存在事务,则加入该事务。这是默认的传播行为。 示例代码: ```java @Transactional(propagation = Propagation.REQUIRED) public void method1() { // 业务逻辑 method2(); // 调用method2方法 } @Transactional(propagation = Propagation.REQUIRED) public void method2() { // 业务逻辑 } ``` 在method1方法调用method2方法时,如果method2方法没有事务,则会加入method1方法的事务。 2. SUPPORTS 如果当前有事务,则加入该事务。如果当前没有事务,则以非事务方式执行。 示例代码: ```java @Transactional(propagation = Propagation.REQUIRED) public void method1() { // 业务逻辑 method2(); // 调用method2方法 } @Transactional(propagation = Propagation.SUPPORTS) public void method2() { // 业务逻辑 } ``` 在method1方法调用method2方法时,如果method1方法有事务,则method2方法会加入method1方法的事务。如果method1方法没有事务,则method2方法会以非事务方式执行。 3. MANDATORY 如果当前有事务,则加入该事务。如果当前没有事务,则抛出异常。 示例代码: ```java @Transactional(propagation = Propagation.REQUIRED) public void method1() { // 业务逻辑 method2(); // 调用method2方法 } @Transactional(propagation = Propagation.MANDATORY) public void method2() { // 业务逻辑 } ``` 在method1方法调用method2方法时,如果method1方法有事务,则method2方法会加入method1方法的事务。如果method1方法没有事务,则会抛出异常。 4. REQUIRES_NEW 如果当前有事务,则挂起该事务,并创建一个新事务。如果当前没有事务,则创建一个新事务。 示例代码: ```java @Transactional(propagation = Propagation.REQUIRED) public void method1() { // 业务逻辑 method2(); // 调用method2方法 } @Transactional(propagation = Propagation.REQUIRES_NEW) public void method2() { // 业务逻辑 } ``` 在method1方法调用method2方法时,如果method1方法有事务,则method2方法会挂起method1方法的事务,并创建一个新事务。如果method1方法没有事务,则method2方法会创建一个新事务。 5. NOT_SUPPORTED 以非事务方式执行。如果当前存在事务,则挂起该事务。 示例代码: ```java @Transactional(propagation = Propagation.REQUIRED) public void method1() { // 业务逻辑 method2(); // 调用method2方法 } @Transactional(propagation = Propagation.NOT_SUPPORTED) public void method2() { // 业务逻辑 } ``` 在method1方法调用method2方法时,如果method1方法有事务,则method2方法会以非事务方式执行。如果method1方法没有事务,则method2方法也会以非事务方式执行。 6. NEVER 以非事务方式执行。如果当前存在事务,则抛出异常。 示例代码: ```java @Transactional(propagation = Propagation.REQUIRED) public void method1() { // 业务逻辑 method2(); // 调用method2方法 } @Transactional(propagation = Propagation.NEVER) public void method2() { // 业务逻辑 } ``` 在method1方法调用method2方法时,如果method1方法有事务,则会抛出异常。如果method1方法没有事务,则method2方法会以非事务方式执行。 7. NESTED 如果当前有事务,则在该事务嵌套一个新事务,如果当前没有事务,则创建一个新事务。 示例代码: ```java @Transactional(propagation = Propagation.REQUIRED) public void method1() { // 业务逻辑 method2(); // 调用method2方法 } @Transactional(propagation = Propagation.NESTED) public void method2() { // 业务逻辑 } ``` 在method1方法调用method2方法时,如果method1方法有事务,则在该事务嵌套一个新事务。如果method1方法没有事务,则method2方法会创建一个新事务

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值