云笔记项目-Spring事务学习-传播NEVER
接下来测试事务传播属性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的更多相关文章
- 云笔记项目-Spring事务学习-传播Requried
在准备好前期的项目搭建后,接下来就一个个的测试,首先测试事务传播的Required Service层两个实现类 Service层两个实现类,只是更换了方法事务传播的属性,其他都一样,后续测试也只修改传 ...
- 云笔记项目-Spring事务学习-传播NOT_SUPPORTED
接下来测试事务传播属性设置为NOT_SUPPORTED Service层 Service层主要设置如下,其中还插入了REQUIRED作为比较. package Service; import java ...
- 云笔记项目-Spring事务学习-传播SUPPORTS
接下来测试事务传播属性SUPPORTS Service层 Service层将方法的事务传播属性设置为SUPPORTS LayerT层代码 package LayerT; import javax.an ...
- 云笔记项目-Spring事务学习-传播MANDATORY
接下来测试事务传播属性MANDATORY Service层 所有Service层实现类都设置事务传播属性为MANDATORY. LayerT层代码 package LayerT; import jav ...
- 云笔记项目-Spring事务学习-传播NESTED
接下来测试事务传播属性NESTED Service层 Service层方法事务传播属性都设置为NESTED. LayerT层代码 package LayerT; import javax.annota ...
- 云笔记项目-Spring事务学习-传播REQUIRES_NEW
接下来测试事务传播的REQUIRES_NEW. Service层 Service层代码在这里不展示了,主要将EMPService1Impl类中的方法事务传播属性设置为REQUIRED,EMPServi ...
- 云笔记项目-Spring事务学习_测试准备
在做云笔记项目的过程中,顺便简单的学习了Spring的事务概念,业务以如果添加笔记,则增加用户星星数目作为例子,引入了事务的概念.类似注册送积分之类的,云笔记项目以增加笔记就送星星来说明事务.具体在添 ...
- Spring事务的传播行为 @Transactional(转)
Spring事务的传播行为 在service类前加上@Transactional,声明这个service所有方法需要事务管理.每一个业务方法开始时都会打开一个事务. Spring默认情况下会对运行期例 ...
- Spring事务的传播行为 @Transactional
Spring事务的传播行为http://blog.csdn.net/cuker919/article/details/5957209 在service类前加上@Transactional,声明这个se ...
随机推荐
- 关于java的动态代理
给目标对象提供一个代理对象.有代理对象控制目标对象的引用. 1.间接的访问目标对象: 2.对原有的业务增强: 比如:Spring的注解: Mybatis同过mapper接口访问数据库 静态代理: 遵循 ...
- java.util.concurrent包下并发锁的特点与适用场景
序号 类 备注 核心代码 适用场景 1 synchronized 同步锁 并发锁加在方法级别上,如果是单例class对象,则只能允许一个线程进入public synchronized void doX ...
- python:面向对象初级
面向对象编程类的概念 : 具有相同属性和技能的一类事物 人类 抽象对象 : 就是对一个类的具体的描述 具体的人 具体 使用面向对象的好处: 使得代码之间的角色关系更加明确 增强了代码的可扩展性 规范了 ...
- [UE4]Skeletal Mesh的碰撞体
一.骨骼模型和骨骼碰撞体肯定不是完全吻合的,因为骨骼模型太复杂了. 二.骨骼碰撞体编辑在Physics Asset资源中 三.Constraints:只显示碰撞体 四.对于射击游戏来说,这样的碰撞体完 ...
- 序列化模块_pickle
序列化: 把不能够直接存储的数据变成字节流(bytes)保存在文件, 进行持久化存储 反序列化: 任何数据都可以转成字节流(bytes)进行存储: 1. dumps 把任意对象序列化 li = [1, ...
- k2datas 基础编程题,判断字符串是否有重复串
package String; public class DuplicateString { public static boolean isDup(String s) throws Exceptio ...
- JDK最新版 Jmeter最新版
http://www.oracle.com/technetwork/java/javase/downloads/jdk10-downloads-4416644.html http://jmeter.a ...
- centos7安装Jenkins
一.准备工作 机器要求: 256MB内存,建议大于512MB 10GB的硬盘空间(用于存放Jenkins镜像) 需要安装以下软件: Java (JRE或者JDK都可以) 需要可以访问公网 关闭防火墙连 ...
- CSS——Flex
任何一个容器都可以指定为Flexbox布局 .flex-container { display: -webkit-flex; /* Safari */ display: flex; } 行内元素可以指 ...
- java——collection总结
Collection 来源于Java.util包,是非常实用常用的数据结构!!!!!字面意思就是容器.具体的继承实现关系如下图,先整体有个印象,再依次介绍各个部分的方法,注意事项,以及应用场景. ...