首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

SpringBoot -J单元测试不使用H2的JdbcTemplate回滚

Spring Boot是一个开源的Java框架,用于快速构建基于Spring的应用程序。它提供了许多开箱即用的功能和约定,使开发人员能够更加专注于业务逻辑的实现。

单元测试是软件开发过程中的重要环节,用于验证代码的正确性和稳定性。在Spring Boot中,我们可以使用JUnit等测试框架进行单元测试。而H2是一个内存数据库,常用于单元测试中的数据存储和回滚操作。

然而,有时候我们可能不希望在单元测试中使用H2的JdbcTemplate进行数据库操作和回滚。这种情况下,我们可以使用一些其他的方法来实现回滚操作,例如使用事务管理器或模拟对象。

一种常见的方法是使用Spring的事务管理器来管理测试中的事务,并在测试完成后回滚事务。我们可以使用@Transactional注解来标记测试方法,使其在测试完成后自动回滚。这样可以确保测试中对数据库的操作不会对实际数据库产生影响。

另一种方法是使用模拟对象来替代实际的数据库操作。我们可以使用Mockito等框架创建模拟对象,并在测试中使用这些模拟对象进行操作。模拟对象可以模拟数据库的行为,使我们能够在不实际操作数据库的情况下进行测试。

总结起来,Spring Boot的单元测试不使用H2的JdbcTemplate回滚可以通过以下两种方法实现:

  1. 使用Spring的事务管理器:在测试方法上添加@Transactional注解,使其在测试完成后自动回滚事务。
  2. 使用模拟对象:使用Mockito等框架创建模拟对象,并在测试中使用这些模拟对象进行操作,以避免对实际数据库的操作。

腾讯云提供了一系列与云计算相关的产品和服务,例如云服务器、云数据库、云存储等。您可以根据具体需求选择适合的产品进行开发和部署。具体产品介绍和使用方法可以参考腾讯云官方文档:腾讯云产品文档

请注意,本回答中没有提及亚马逊AWS、Azure、阿里云、华为云、天翼云、GoDaddy、Namecheap、Google等流行的云计算品牌商,如有需要,请自行查阅相关资料。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SpringBoot使用H2内存数据库单元测试代码示例

一、背景 单元测试是提高代码质量和保证代码正确性重要保证。 DAO单元测试有常见两种方案。 【1】使用H2这类内存数据库进行单元测试。 【2】使用MySQL数据库,测试后。.../h2database 使用H2内存数据库来单元测试优势在于 h2更快速,且支持JDBC API。...2.2 使用MySQL测试后 使用MySQL测试后是常见一种方式,最大问题如果是自己本地测试,其他人如果想测试需要再创建表和插入数据,非常麻烦。...大家还可以进入h2驱动jar包和mybatisjar中查看源码逻辑。 通过这些可以学到更多内容。 五、总结 本文主要讲述SpringBoot使用H2内存数据库进行单元测试案例。...在此也提倡大家对DAO层采用内存数据库方式进行单元测试。 对于Service层测试建议使用mockito,通过mock依赖其他服务来检测当前模块逻辑是否正确方式进行测试。

3K30

springboot(13)-测试

springboot测试 我们之前springboot相关文章中,对于一些结果验证都是通过浏览器作为测试入口来展开,但是实际上我们后端开发人员在写好一个应用程序时,通过现有的测试框架,通过做单元测试对功能做第一轮验收...user.getName()); Assert.assertSame("不一样呀", 10L, user.getId()); } } @Transactional测试执行后数据...也可使用classpath:、file:、http: 开头,@Runwith是JUnit标准一个注解,Spring单元测试都用SpringRunner.class,@SpringBootTest用于...3 web层单元测试 很多时候我们都是通过启动应用后,通过浏览器访问来验证程序可行性,但是我们可以通过测试框架使用更简单方式来测试controller层程序。...单元测试执行成功。 总结 springboot单元测试还有很多其他注解和用法,给我们对应用程序单测带来了极大方便,如果感兴趣可以一起探讨。

54120

聊聊spring事务在异常场景下发生按套路出牌事儿

不支持事务 异常被吃了 异常类型错误 其中有条异常被吃了,会导致事务无法,这个引起我好奇,是否真的是这样,刚好也没写文素材了,就来聊聊事务与异常在某些场景产生化学反应 02 示例素材 01 一张没啥业务含义表...运行单元测试方法 @Test void testTxA() { txTestService.saveTxTestA(); } 得到如下结果 答案: 发生了,无法插入成功 看到这个答案...会加入到saveTxTestA事务中,即saveTxTestC和saveTxTestA是属于同一个事务,因此saveTxTestC抛异常回,根据事务原子性,saveTxTestA也会发生 问题延伸...运行单元测试方法 @Test void testTxB() { txTestService.saveTxTestB(); } 得到如下结果 答案: 发生了,无法插入成功 看到这个答案...saveTxTestB会,纯粹是因为saveTxTestD抛出异常,传递到了saveTxTestB,导致saveTxTestB也因为RuntimeException发生了滚了 问题延伸: 如果想

34210

聊聊spring事务在异常场景下发生按套路出牌事儿

不支持事务 异常被吃了 异常类型错误 其中有条异常被吃了,会导致事务无法,这个引起我好奇,是否真的是这样,刚好也没写文素材了,就来聊聊事务与异常在某些场景产生化学反应 示例素材 1、一张没啥业务含义表...运行单元测试方法 @Test void testTxA() { txTestService.saveTxTestA(); } 得到如下结果 [在这里插入图片描述] 答案: 发生了,无法插入成功...会加入到saveTxTestA事务中,即saveTxTestC和saveTxTestA是属于同一个事务,因此saveTxTestC抛异常回,根据事务原子性,saveTxTestA也会发生 问题延伸...运行单元测试方法 @Test void testTxB() { txTestService.saveTxTestB(); } 得到如下结果 [在这里插入图片描述] 答案: 发生了,无法插入成功...saveTxTestB会,纯粹是因为saveTxTestD抛出异常,传递到了saveTxTestB,导致saveTxTestB也因为RuntimeException发生了滚了 问题延伸: 如果想

51430

Spring学习笔记(二十八)——springboot单元测试&JUnit5

注意: SpringBoot 2.4 以上版本移除了默认对 Vintage 依赖。...编写测试方法:@Test标注(注意需要使用junit5版本注解) Junit类具有Spring功能,@Autowired、比如 @Transactional 标注测试方法,测试完成后自动 1....,类似于JUnit4中@Categories * @Disabled :表示测试类或测试方法执行,类似于JUnit4中@Ignore * @Timeout :表示测试方法运行如果超过了指定时间将会返回错误...("如我西沉"); System.out.println(jdbcTemplate); } // @Disabled:执行全部测试时候执行该测试 @Disabled...利用@ValueSource等注解,指定入参,我们将可以使用不同参数进行多次单元测试,而不需要每新增一个参数就新增一个单元测试,省去了很多冗余代码。

1.1K10

秒懂如何使用SpringBoot+Junit4进行单元测试

关于这些常用功能详细案例,可以参考文末Assertj-DB文档。 PS: 实验表明,对于事务控制测试用例,assertJ-DB似乎并不能得到我们想要结果。...如下案例中,测试用例是事务,但是使用JdbcTemplate可以得到正确结果,但是使用assertJ-DB就不行了。只能针对非事务测试用例,assertJ-DB才能得到正确结果。...4.2 数据库造数 我们在测试DAO层关于SQL增删查改前,要先提供一批专供测试使用假数据,一般有以下方式: 使用内存数据库 如果希望测试用例执行污染测试数据库,那么可以建立一个专为测试用例执行使用内存数据库...测试用例使用事务 好处是不会对测试数据库造成数据污染,但是需要在测试用例逻辑执行前,手动准备数据; 五、Maven集成 我们在如上学习过程中,都是写完单元测试后直接运行了。...),当然还可以使用ExpectedException; 测试用例不能依赖数据库中已有数据,应该在测试用例中自己准备数据; 测试完成后应该回数据,避免造成数据库污染,保证测试用例可以反复执行; 通常不使用单元测试来测

1.7K30

SpringBoot 系列教程之声明式事务 Transactional

配置 本篇主要介绍jdbcTemplate配合事务注解@Transactional使用姿势,至于 JPA,mybatis 在实际使用区别上,并不大,后面会单独说明 创建一个 SpringBoot...适用场景 在使用注解@Transactional声明式事务时,其主要是借助 AOP,通过代理来封装事务逻辑,所以 aop 生效场景,也适用于这个事务注解生效场景 简单来讲,下面几种 case,...如果超过该时间限制但事务还没有完成,则自动事务。...rollback-for 用于指定能够触发事务异常类型,如果有多个异常类型需要指定,各类型之间可以通过逗号分隔。...关于上面几个属性使用实例,以及哪些情况下,会导致声明式事务生效,会新开坑进行说明,敬请期待。。。

1.9K30

Spring Boot 2.x基础教程:使用JTA实现分布式事务

这样例子很常见,比如:在订单库中创建一条订单记录,同时还需要在商品库中扣减商品库存。如果库存扣减失败,那么我们希望订单创建也能够。...依赖来使用 由于Bitronix自Spring Boot 2.3.0开始推荐使用,所以在下面的动手环节中,我们将使用Atomikos作为例子来介绍JTA使用。...准备工作 这里我们将使用最基础JdbcTemplate来实现数据访问,所以如果你还不会使用JdbcTemplate配置多数据源,建议先看一下JdbcTemplate多数据源配置。...,这个异常是在test1库中数据更新后才产生,这样就可以测试一下test1更新成功,之后是否还能在JTA帮助下实现。...测试验证 将上面编写单元测试运行起来: ?

1.2K20

Spring 事务使用详解

,而这恰恰可以符合事务使用情况,在目标方法执行成功后,提交事务,失败时候,事务。...,进行是连接 418958713,所以 user 和 address 操作都会被,都插入失败。...,所以它们可以独立提交或,外部事务不受内部事务状态影响; 对于上述栗子来说,如果 addAddress 抛异常且 addUser 不进行异常捕获,则两个事务都会进行,如果 addUser...现在如果内层 addAddress 执行成功,抛异常,外层 addUser 抛异常,则 内层 addAddress 会嘛?...,可是都会映射到底层数据库中同一个物理事务中,所以只要有一个进行了,则都会进行

1.2K60

Spring事务我是这么玩

只是我们手动开启事务,提交事务/事务操作由Spring替我们完成了,仅仅这些还是不够,Spring在这些基础操作上也针对数据库事务做了一些增强。...Spring在官方文档里定义了接口规范给不同数据源厂商去提供标准,各个厂商去实现然后注入到Spring容器中就就好了,Spring定义规范也特别的简单,获取当前事务,提交与。...声明式事务 因为Spring优秀,声明式事务用起来就更简单了,Spring使用AOP方式将事务处理织入到了我们业务代码中,如果你项目里面用到了SpringBoot,你只需要在业务方法或是累上加上一个...那就是拿到当前事务设置。 发送MQ消息要怎么处理?...把用户注册业务逻辑代码try-catch了然后在finally里面获取当前事务状态然后再决定是否发送,优雅优雅,统统优雅。

36020

聊一聊数据库事务

因此,使用可重复读隔离级别的事务可以多次检索同一行集,并对它们执行任意操作,直到提交或操作终止该事务。 REPEATABLE READ 解決了脏读问题。...“某些非事务型表上变更不能被”但大多数情况下,对非事务型表操作都不会有提示。...异常默认是运行时异常,可以通过rollbackFor属性制定异常类型。...在同一个类中方法调用。 5. 方法事务传播类型不支持事务。 6. 不正确地捕获异常。使用了try-catch代码块将异常捕捉了,没有向上抛出异常,事务不会。 7.标注错误异常类型。...Spring事务默认类型是RuntimeException类型,如果没有制定类型,抛出错误不是RuntimeException类型,则无法 资料 《MySQL是怎样运行:从根儿上理解MySQL

46321

Spring6整合JUnit5和1事务JdbcTemplate

事务在执行过程中发生错误,会被(Rollback)到事务开始前状态,就像这个事务从来没有执行过一样。...此时这个很可能出问题程序应该被,撤销它已做操作,事务结束,把资源让出来,让其他正常程序可以执行。 概括来说就是一句话:超时,释放资源。...(ArithmeticException),但是我们设置策略是,当出现ArithmeticException不发生,因此购买图书操作正常执行 7.3.8、事务属性:隔离级别 ①介绍 数据库系统必须具有隔离并发运行各个事务能力...被嵌套事务可以独立于外层事务进行提交或。如果外层事务不存在,行为就像REQUIRED一样。【有事务的话,就在这个事务里再嵌套一个完全独立事务,嵌套事务可以独立提交和。...-- rollback-for属性:设置异常 --> <!

1.1K30

SpringBoot 基础系列】接口上注解 AOP 拦截不到场景兼容实例演示

SpringBoot 基础系列】接口上注解 AOP 拦截不到场景兼容 在 Java 开发过程中,面向接口编程可能是大家常态,切面也是各位大佬使用 Spring 时,或多或少会使用一项基本技能...事务注解测试 上面这个生效,那我们通常写在接口上事务注解,会生效么?...(ans); throw new RuntimeException("事务"); } } 注意上面的 update 方法,事务注解在接口上,接下来我们需要确认调用之后,是否会...滚了,有木有!!! 果然是没有问题,吓得我一身冷汗,这要是有问题,那就...(不敢想不敢想) 所以问题来了,为啥第一种方式生效呢??? II....SpringBoot 应用篇之 AOP 实现日志功能 SpringBoot 基础篇 AOP 之高级使用技能 SpringBoot 基础篇 AOP 之基本使用姿势小结 1.

58810

SpringBoot 系列教程之编程式事务使用姿势介绍篇

SpringBoot 系列教程之编程式事务使用姿势介绍篇 前面介绍几篇事务博文,主要是利用@Transactional注解声明式使用姿势,其好处在于使用简单,侵入性低,可辨识性高(一看就知道使用了事务...);然而缺点也比较明显,不够灵活,稍不注意,可能就因为姿势不对,导致事务生效 本文将介绍另外一种事务使用姿势,借助TransactionTemplate编程式事务 <!...配置 本篇主要介绍jdbcTemplate+transactionTemplate来完成一个编程式事务实例 demo 创建一个 SpringBoot 项目,版本为2.2.1.RELEASE,使用...使用 case 为了演示事务特性,我们设计几个简单 sql 操作,并抛出异常,引发回,如下 在 doUpdate 方法中,显示更新 name,输出更新结果,然后再更新 money 值,最后抛出一个异常...,封装在transactionTemplate.execute调用中,通过设置transactionStatus.setRollbackOnly()来标记 通过前面几篇博文学习我们知道实际使用

1.4K20

spring 事务机制个人总结

「丢失」(第一类事务丢失):丢失指A事务提交了,但是B事务事务滚了,当A提交成功但是B因为事务滚了A数据,这时候对于A来说事务就算是丢失了。...「规则」:规定了当前事务会在什么情况下进行,默认情况是按照运行时异常进行,也可以设置指定某些异常不进行,但是需要注意指定异常类必须是Throwable子类。...但是由于有共同方法所以需要使用 「模板方法」模式控制抽象和模板方法不同细节,最后最重要是如何实现嵌套事务以及多线程访问时候源保持线程隔离呢?...return yourTxManager; } } 顺带一提,如果我们想要在注解方法里面使用编程式TransactionAspectSupport类里面的方法手动事务,可以使用下面的方法进行...抛出不被异常 这也是非常常见情况,所以很多时候建议使用注解就加上一个rollBackFor,哪怕使用默认规则也建议标记一下,下面的方法虽然抛出异常,但是可以发现最终数据是没有s: /*

94110

关于异步@Async + 事务@Transactional结合使用问题分析【享学Spring MVC】

本文废话,分析一下他俩结合一起使用case,因为据我了解很多人对结合一起使用时,心里还是打鼓,这样对生产环境使用还是有隐患。...现象:异常抛出,insert语句未生效(被)。 结论:事务生效。...(HelloServiceImpl.java:47) 现象:两个异常信息都有输出,异步线程生效,insert插入均没有生效(双双完成) 结论:主线程和子线程在事务上是相互隔离,子线程异常不会影响主线程事务混与否...eat和play表均插入无效(被) 结论:同上 场景四: 此场是我模拟最后一个场景:异步线程里继续调用异步线程,并且加上事务。...eat插入无效(被),play插入成功 结论:不同线程之间事务完全隔离,异步线程内仍是可以调用异步~ 总结 本文没有新内容,源于跟一个小伙伴讨论这块时,自己也有些打鼓地方,因此就写了本文做一个记录

8.6K41

SpringBoot 系列教程之事务生效几种 case

SpringBoot 系列教程之事务生效几种 case 前面几篇博文介绍了声明式事务@Transactional使用姿势,只知道正确使用姿势可能还不够,还得知道什么场景下不生效,避免采坑。...配置 本文 case,将使用声明式事务,首先我们创建一个 SpringBoot 项目,版本为2.2.1.RELEASE,使用 mysql 作为目标数据库,存储引擎选择Innodb,事务隔离级别为 RR...生效 case 在声明式事务使用教程200119-SpringBoot 系列教程之声明式事务 Transactional 中,也提到了一些事务生效方式,比如声明式事务注解@Transactional...异常匹配 @Transactional注解默认处理运行时异常,即只有抛出运行时异常时,才会触发事务,否则并不会如 /** * 非运行异常,且没有通过 rollbackFor 指定抛出异常,生效...(550)); } 从下面的输出也可以知道,子线程修改并不在同一个事务内,不会被 ============ 事务生效case start ========== transaction before

74130

SpringBoot 基础系列】接口上注解 AOP 拦截不到场景兼容实例演示

[logo.jpg] 【SpringBoot 基础系列】接口上注解 AOP 拦截不到场景兼容 在 Java 开发过程中,面向接口编程可能是大家常态,切面也是各位大佬使用 Spring 时,或多或少会使用一项基本技能...事务注解测试 上面这个生效,那我们通常写在接口上事务注解,会生效么?...(ans); throw new RuntimeException("事务"); } } 注意上面的 update 方法,事务注解在接口上,接下来我们需要确认调用之后,是否会...既然拦截上,多半是因为子类没有继承父类注解,所以在进行切点匹配时,匹配不到;既然如此,那就让它在匹配时,找下父类看有没有对应注解 1....SpringBoot 应用篇之 AOP 实现日志功能 SpringBoot 基础篇 AOP 之高级使用技能 SpringBoot 基础篇 AOP 之基本使用姿势小结 1.

2.8K00

【快学springboot】在springboot中写单元测试

前言 很多公司都有写单元测试硬性要求,在提交代码时候,如果单测通不过或者说单元测试各种覆盖率达标,会被拒绝合并代码。写单元测试,也是保证代码质量一种方式。...spring依赖问题 现在Java开发,基本上离不开spring了。但是使用spring,写单测时候就会存在一个依赖注入问题。...写单元测试springboot中,解决spring依赖问题,非常简单。...: 如果是通过spring initialize创建springboot项目(本系列第一篇文章有讲解),其实会自动创建一个单元测试类: 我们在写单元测试时候,直接继承这个类即可。...单元测试事务单元测试,难免需要操作数据库。有时候单元测试数据库跟开发时候数据库是同一个,为了不影响数据库数据,需要在单测完成之后,将操作

19310
领券