文档章节

springboot 测试,事务相关

super-wen
 super-wen
发布于 2017/07/20 16:54
字数 411
阅读 25
收藏 1

springboot测试

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestServiceImplTest {

    @Autowired
    TestService testService;

    @Test
    public void add() throws Exception {
        TestBean testBean = new TestBean();
        testBean.setId(337595516089008160L);
        System.out.println(testService.add(testBean));
    }

}

这种情况下,是默认没有开启事务回滚的,当测试完成不会回滚数据.

开启测试完成回滚

@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
@Rollback
public class TestServiceImplTest {

    @Autowired
    TestService testService;

    @Test
//    @Rollback
    public void add() throws Exception {
        TestBean testBean = new TestBean();
        testBean.setId(337595516089008160L);
        System.out.println(testService.add(testBean));
    }

}

测试完成后,会类似看到下面输出,同时数据也会回滚.

2017-07-20 16:41:25.286  INFO 12528 --- [           main] o.s.t.c.transaction.TransactionContext   : Rolled back transaction for test context [DefaultTestContext@a3d8174 testClass = TestServiceImplTest,

Rollback注解,默认值true,开启回滚,可以在类上,也可以方法上

@Transactional(readOnly = true) 含义.

一直以来的理解都是声明只读事务,对其进行优化,当执行插入操作的时候抛出异常.

今天将其加在一个insert方法上面,发现测试插入成功.

  @Transactional(rollbackFor = Exception.class,readOnly = true)
    public int add(TestBean testBean) {
        int i =  testMapper.insert(testBean);
        return i;
    }

阅读源码.

	/**
	 * {@code true} if the transaction is read-only.
	 * <p>Defaults to {@code false}.
	 * <p>This just serves as a hint for the actual transaction subsystem;
	 * it will <i>not necessarily</i> cause failure of write access attempts.
	 * A transaction manager which cannot interpret the read-only hint will
	 * <i>not</i> throw an exception when asked for a read-only transaction
	 * but rather silently ignore the hint.
	 * @see org.springframework.transaction.interceptor.TransactionAttribute#isReadOnly()
	 */
	boolean readOnly() default false;

发现readOnly = true 只是对底层系统暗示要求只读事务,当底层支持时才会针对插入操作抛出异常,当不支持时,默默忽略(而大部分简单的jdbc都是不支持的)

Transactional 注解在父类上,子类有效

© 著作权归作者所有

共有 人打赏支持
super-wen
粉丝 5
博文 36
码字总数 12956
作品 0
徐汇
程序员
Spring Boot 全家桶 - SpringBootBucket

Spring Boot 现在已经成为Java 开发领域的一颗璀璨明珠,它本身是包容万象的,可以跟各种技术集成。 本项目对目前Web开发中常用的各个技术,通过和SpringBoot的集成,并且对各种技术通过“一...

一刀
03/05
0
1
Spring boot Mybatis 整合(完整版)

个人开源项目 springboot+mybatis+thymeleaf+docker构建的个人站点开源项目(集成了个人主页、个人作品、个人博客) 朋友自制的springboot接口文档组件swagger2 更多干货 SpringBoot系列目录...

舒运
07/09
0
0
springBoot 搭建web项目(前后端分离,附项目源代码地址)

概述 该项目包含springBoot-example-ui 和 springBoot-example,分别为前端与后端,前后端分离,利用ajax交互。 前端html 技术: + + + + 该项目git地址:https://github.com/jiangcaijun/sp...

开源小菜鸟2333
2017/11/01
0
0
(一)SpringBoot——helloworld

一、为什么会诞生SpringBoot? 先看看spring的优势: 1、代码解耦、简化开发:代码中不再需要new去构造对象,而是交由spring去管理对象。 2、支持AOP:面向切面的编程,方便进行权限拦截、日...

solidwang
04/17
0
0
10分钟入门SpringBoot

SpringBoot是基于spring框架衍生的一种新的微服务框架,如果对Spring有一定了解的同学肯定知道在Spring中需要配置各种xml文件完成bean的注册操作,随着服务越来越多,配置就变得越来越复杂,...

jwfy
06/14
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Java IO类库之PrintStreamWriter

* A <code>PrintStream</code> adds functionality to another output stream, * namely the ability to print representations of various data values * conveniently. Two other fea......

老韭菜
今天
0
0
qduoj~前端~二次开发~笔记

青岛大学qdu的onlinejudge是js的写的前端,框架是vue.js,在nodejs上部署运行,其实整体运行还是建立在docker的容器虚拟环境里,这里暂时不需要docker。安装环境是Ubuntu14-64bit 1.安装一大...

虚拟世界的懒猫
今天
6
0
ConcurrentHashMap源码解读

部分内容转自:http://jiabinyuan.xyz/#/app/archive/detail/25 内部结构 内部采用了segment结构,每一个segment相当于一个hashtable。看下面的结构图: 从图的结构我们可以了解到,Concurr...

edwardGe
今天
1
0
Ubuntu终端Tab键自动补全

打开 /etc/bash.bashrc,找到下列代码,取消注释。 #enable bash completion in interactive shells#if ! shopt -oq posix; then# if [-f /usr/share/bash-completion/bash_compl......

大熊猫
今天
0
0
polipo socks5代理转http代理

天朝的网络,哎~ 装个 yarn 都时而会卡 假设在SSlocal 已经装好运行的前提下,来安装设置 polipo sudo apt-get install polipo sudo vim /etc/polipo/config 追加下列配置内容,并保存 socksP...

纯洁徐
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部