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

Service层

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

LayerT层代码

 package LayerT;

 import javax.annotation.Resource;

 import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import Entity.EMP;
import Service.EMPService1;
import Service.EMPService2;
/**
* 测试Never
* @author yangchaolin
*
*/
@Component("neverTest")
public class NeverTest {
@Resource(name="service1")
EMPService1 service1;
@Resource(name="service2")
EMPService2 service2;
/**
* 外层方法没有事务,但是抛出异常
* @param emp1
* @param emp2
*/
public void testNeverWithoutTransaction1(EMP emp1,EMP emp2) {
service1.addEmp1(emp1);
service2.addEmp2(emp2);
throw new RuntimeException();
}
/**
* 外层方法没有事务,内层方法抛出异常
* @param emp1
* @param emp2
*/
public void testNeverWithoutTransaction2(EMP emp1,EMP emp2) {
service1.addEmp1(emp1);
service2.addEmp2WithException(emp2);//就算方法里有异常,也提交了
}
/**
* 外层方法有事务,并且抛出异常
* @param emp1
* @param emp2
*/
@Transactional
public void testNeverWithTransaction1(EMP emp1,EMP emp2) {
service1.addEmp1(emp1);
service2.addEmp2(emp2);
throw new RuntimeException();
}
/**
* 外层方法有事务,都没有异常
* @param emp1
* @param emp2
*/
@Transactional
public void testNeverWithTransaction2(EMP emp1,EMP emp2) {
service1.addEmp1(emp1);
service2.addEmp2(emp2);
} }

测试代码

 package TestCase;

 import org.junit.Test;

 import Entity.EMP;
import LayerT.NeverTest; public class neverTestCase extends baseTest{
@Test
public void test1() {
NeverTest T1=ac.getBean("neverTest",NeverTest.class);
EMP emp1=new EMP("张三",18);
EMP emp2=new EMP("李四",28);
T1.testNeverWithoutTransaction1(emp1, emp2);
}
@Test
public void test2() {
NeverTest T1=ac.getBean("neverTest",NeverTest.class);
EMP emp1=new EMP("张三",18);
EMP emp2=new EMP("李四",28);
T1.testNeverWithoutTransaction2(emp1, emp2);
}
@Test
public void test3() {
NeverTest T1=ac.getBean("neverTest",NeverTest.class);
EMP emp1=new EMP("张三",18);
EMP emp2=new EMP("李四",28);
T1.testNeverWithTransaction1(emp1, emp2);
}
@Test
public void test4() {
NeverTest T1=ac.getBean("neverTest",NeverTest.class);
EMP emp1=new EMP("张三",18);
EMP emp2=new EMP("李四",28);
T1.testNeverWithTransaction1(emp1, emp2);
}
}

测试结果

(1)外层方法没有事务

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

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

(2)外层方法有事务

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

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

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

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

云笔记项目-Spring事务学习-传播NEVER的更多相关文章

  1. 云笔记项目-Spring事务学习-传播Requried

    在准备好前期的项目搭建后,接下来就一个个的测试,首先测试事务传播的Required Service层两个实现类 Service层两个实现类,只是更换了方法事务传播的属性,其他都一样,后续测试也只修改传 ...

  2. 云笔记项目-Spring事务学习-传播NOT_SUPPORTED

    接下来测试事务传播属性设置为NOT_SUPPORTED Service层 Service层主要设置如下,其中还插入了REQUIRED作为比较. package Service; import java ...

  3. 云笔记项目-Spring事务学习-传播SUPPORTS

    接下来测试事务传播属性SUPPORTS Service层 Service层将方法的事务传播属性设置为SUPPORTS LayerT层代码 package LayerT; import javax.an ...

  4. 云笔记项目-Spring事务学习-传播MANDATORY

    接下来测试事务传播属性MANDATORY Service层 所有Service层实现类都设置事务传播属性为MANDATORY. LayerT层代码 package LayerT; import jav ...

  5. 云笔记项目-Spring事务学习-传播NESTED

    接下来测试事务传播属性NESTED Service层 Service层方法事务传播属性都设置为NESTED. LayerT层代码 package LayerT; import javax.annota ...

  6. 云笔记项目-Spring事务学习-传播REQUIRES_NEW

    接下来测试事务传播的REQUIRES_NEW. Service层 Service层代码在这里不展示了,主要将EMPService1Impl类中的方法事务传播属性设置为REQUIRED,EMPServi ...

  7. 云笔记项目-Spring事务学习_测试准备

    在做云笔记项目的过程中,顺便简单的学习了Spring的事务概念,业务以如果添加笔记,则增加用户星星数目作为例子,引入了事务的概念.类似注册送积分之类的,云笔记项目以增加笔记就送星星来说明事务.具体在添 ...

  8. Spring事务的传播行为 @Transactional(转)

    Spring事务的传播行为 在service类前加上@Transactional,声明这个service所有方法需要事务管理.每一个业务方法开始时都会打开一个事务. Spring默认情况下会对运行期例 ...

  9. Spring事务的传播行为 @Transactional

    Spring事务的传播行为http://blog.csdn.net/cuker919/article/details/5957209 在service类前加上@Transactional,声明这个se ...

随机推荐

  1. Git 安装和使用教程

    Git 安装和使用教程 git 提交 全部文件 git add .  git add xx命令可以将xx文件添加到暂存区,如果有很多改动可以通过 git add -A .来一次添加所有改变的文件.注意 ...

  2. lenovo 笔记本ideapad 320c-15改装win7问题

    lenovo 笔记本ideapad 320c-15改装win7问题: 去联想售后官网下载个Lenovo Utility驱动安装上,正常重启下,按Fn+F7,单击无线就能够开启无线网卡.Fn+F11.F ...

  3. close_wait状态和time_wait状态(TCP连接)

    1.CLOSE_WAIT的简单解决方案 不久前,我的Socket Client程序遇到了一个非常尴尬的错误.它本来应该在一个socket长连接上持续不断地向服务器发送数据,如果socket连接断开,那 ...

  4. 在socket的server端处理client端发来的数据

    一.楔子 最近做了一个需求遇到一个坑,归结成一个小问题,其实就是在socket的server端处理client端发来的数据的问题,现将这个问题总结一下,本文将数据在server端以字典的形式存储. 另 ...

  5. 生成器函数_yield_yield from_send

    生成器函数 ''' yield类似于return 相同: 都返回出去一个值 不同: yield每次返回时, 会记录当前执行的位置 等下次调用生成器, 会从该位置向下走 return 直接终止函数 '' ...

  6. Java子类访问父类的私有成员变量

    /**子类会继承父类所有的属性和方法. * 但是根据不同的权限标识符,子类不可见父类的私有变量,但可以通过父类的公共方法访问私有变量 * 所以对于重名变量,子类和父类都各有一份. * 对于子类和父类中 ...

  7. jquery中文档处理的总结

    jQuery文档处理总结 1.返回值:append(content|fn) $("p").append("<b>Hello</b>"); ...

  8. centos7安装NFS

    在服务器上安装nfs服务,并将该服务器的/data目录进行共享. 服务端配置 安装nfs组件,并检查安装状态 yum install nfs-utils rpcbindrpm -qa nfs-util ...

  9. 团队项目需求分析——NABCD

    N(Need)需求 经发现,很多人在理发时都要经过漫长的排队等待时间,这些时间也就因此白白浪费掉了,而且一些理发店也会因个别顾客不愿等待而损失客源.对此,我们设计出了这款小软件——理了么,一款专门为理 ...

  10. es6 和 python 语法比较

    http://www.linchaoqun.com/html/cms/content.jsp?id=1509528630774 Python3笔记:Python与ECMAScript部分语法对比 ht ...