zoukankan      html  css  js  c++  java
  • 云笔记项目-Spring事务学习-传播NEVER

    接下来测试事务传播属性NEVER

    Service层

    Service层中设置事务传播属性都为NEVER。

    LayerT层代码

     1 package LayerT;
     2 
     3 import javax.annotation.Resource;
     4 
     5 import org.springframework.stereotype.Component;
     6 import org.springframework.transaction.annotation.Transactional;
     7 
     8 import Entity.EMP;
     9 import Service.EMPService1;
    10 import Service.EMPService2;
    11 /**
    12  * 测试Never
    13  * @author yangchaolin
    14  *
    15  */
    16 @Component("neverTest")
    17 public class NeverTest {
    18     @Resource(name="service1")
    19     EMPService1 service1;
    20     @Resource(name="service2")
    21     EMPService2 service2;
    22     /**
    23      * 外层方法没有事务,但是抛出异常
    24      * @param emp1
    25      * @param emp2
    26      */
    27     public void testNeverWithoutTransaction1(EMP emp1,EMP emp2) {
    28         service1.addEmp1(emp1);
    29         service2.addEmp2(emp2);
    30         throw new RuntimeException();
    31     }
    32     /**
    33      * 外层方法没有事务,内层方法抛出异常
    34      * @param emp1
    35      * @param emp2
    36      */
    37     public void testNeverWithoutTransaction2(EMP emp1,EMP emp2) {
    38         service1.addEmp1(emp1);
    39         service2.addEmp2WithException(emp2);//就算方法里有异常,也提交了
    40     }
    41     /**
    42      * 外层方法有事务,并且抛出异常
    43      * @param emp1
    44      * @param emp2
    45      */
    46     @Transactional
    47     public void testNeverWithTransaction1(EMP emp1,EMP emp2) {
    48         service1.addEmp1(emp1);
    49         service2.addEmp2(emp2);
    50         throw new RuntimeException();
    51     }
    52     /**
    53      * 外层方法有事务,都没有异常
    54      * @param emp1
    55      * @param emp2
    56      */
    57     @Transactional
    58     public void testNeverWithTransaction2(EMP emp1,EMP emp2) {
    59         service1.addEmp1(emp1);
    60         service2.addEmp2(emp2);
    61     }
    62     
    63 }

    测试代码

     1 package TestCase;
     2 
     3 import org.junit.Test;
     4 
     5 import Entity.EMP;
     6 import LayerT.NeverTest;
     7 
     8 public class neverTestCase extends baseTest{
     9     @Test
    10     public void test1() {
    11         NeverTest T1=ac.getBean("neverTest",NeverTest.class);
    12         EMP emp1=new EMP("张三",18);
    13         EMP emp2=new EMP("李四",28);
    14         T1.testNeverWithoutTransaction1(emp1, emp2);
    15       }    
    16     @Test
    17     public void test2() {
    18         NeverTest T1=ac.getBean("neverTest",NeverTest.class);
    19         EMP emp1=new EMP("张三",18);
    20         EMP emp2=new EMP("李四",28);
    21         T1.testNeverWithoutTransaction2(emp1, emp2);
    22       }    
    23     @Test
    24     public void test3() {
    25         NeverTest T1=ac.getBean("neverTest",NeverTest.class);
    26         EMP emp1=new EMP("张三",18);
    27         EMP emp2=new EMP("李四",28);
    28         T1.testNeverWithTransaction1(emp1, emp2);
    29       }    
    30     @Test
    31     public void test4() {
    32         NeverTest T1=ac.getBean("neverTest",NeverTest.class);
    33         EMP emp1=new EMP("张三",18);
    34         EMP emp2=new EMP("李四",28);
    35         T1.testNeverWithTransaction1(emp1, emp2);
    36       }    
    37 }

    测试结果

    (1)外层方法没有事务

    test1 张三插入,李四插入
    test2 张三插入,李四插入

    结论:当外层方法没有事务时,才能正常执行。并且不管内层方法有没有抛出异常,事务都提交了,所以定义了NEVER传播属性后,将以非事务方式来执行方法。

    (2)外层方法有事务

    test3 张三未插入,李四未插入
    test4 张三未插入,李四未插入

    执行报错:"Existing transaction found for  transaction marked with propagation 'never' "。

    结论:当业务方法事务传播属性定义为NEVER时,只要外层方法有事务,执行就会报错,提示外层方法存在有事务,但是内层方法事务被标记为传播属性NEVER,导致无法执行。因此这种设置不会插入数据,只要执行就报错。

    参考博客:https://segmentfault.com/a/1190000013341344

  • 相关阅读:
    批量修改文件的名字
    字节码指令以及操作数栈的分析
    字节码文件的分析
    类加载器详解
    类的加载-连接-初始化
    电商订单ElasticSearch同步解决方案--使用logstash
    springboot整合Mangodb实现crud,高级查询,分页,排序,简单聚合
    mongodb安装教程(亲测有效)
    Azure : 通过 SendGrid 发送邮件
    用java实现删除目录
  • 原文地址:https://www.cnblogs.com/youngchaolin/p/10629878.html
Copyright © 2011-2022 走看看