SpringBoot事物Transaction实战讲解教程 (5)

控制台打印的数据:

请求参数:User [id=1, name=xuwujing, age=18] 查询的数据1:null 查询的数据2:User [id=1, name=xuwujing, age=18] Duplicate entry '1' for key 'PRIMARY' 最后查询的数据:null

注: 在第二次测试的之前是把第一次测试写入数据库的id为1的数据个删除了!

第一次测试中由于没有添加@Transactional注解,因此发生了异常数据还是写入了,但是第二次测试中添加了@Transactional注解,发现即使数据已经写入了,但是出现了异常之后,数据最终被回滚了,没有写入!
从上述的测试用例中可以看到测试用例一种的事物已经生效了!

测试示例二

由于使用示例二中的代码几乎和使用示例一种的一样,不同的是异常由我们自己进行控制!

使用进行POST请求

:8182/api/user/test2

Body参数为:

{"id":1,"name":"xuwujing","age":18}

控制台打印的数据:

请求参数:User [id=1, name=xuwujing, age=18] 查询的数据1:null 查询的数据2:User [id=1, name=xuwujing, age=18] 发生异常,进行手动回滚! Duplicate entry '1' for key 'PRIMARY' 最后查询的数据:null

可以看到事物生效了!

测试示例三

由于使用示例三中进行了子方法调用,这里我们进行两次测试,根据不同的请求条件来进行测试!

第一次测试:

使用进行POST请求

:8182/api/user/test3

Body参数为:

{"id":1,"name":"xuwujing","age":18}

控制台打印的数据:

请求参数:User [id=1, name=xuwujing, age=18] 查询的数据1:null 查询的数据2:User [id=1, name=xuwujing, age=18] 发生异常,进行手动回滚! Duplicate entry '1' for key 'PRIMARY' 最后查询的数据:null

第二次测试:

使用进行POST请求

:8182/api/user/test3

Body参数为:

{"id":1,"name":"xuwujing","age":21}

控制台打印的数据:

请求参数:User [id=1, name=xuwujing, age=21] 查询的数据1:null 查询的数据2:User [id=1, name=xuwujing, age=21] 查询的数据3:User [id=1, name=xuwujing2, age=21] 发生异常,进行手动回滚! Duplicate entry '1' for key 'PRIMARY' 最后查询的数据:null

根据上述的两次测试,可以得出使用rollbackFor注解或者将该子方法的异常抛出由调用的方法进行处理都可以使事物生效!

测试示例四

由于使用示例四中进行了手动控制事物,这里我们进行两次测试,根据不同的请求条件来进行测试!

第一次测试:

使用进行POST请求

:8182/api/user/test4

Body参数为:

{"id":1,"name":"xuwujing","age":18}

控制台打印的数据:

请求参数:User [id=1, name=xuwujing, age=18] 查询的数据1:null 查询的数据2:User [id=1, name=xuwujing, age=18] 查询的数据3:User [id=1, name=xuwujing2, age=20] 手动提交事物成功! 模拟第二个异常! 最后查询的数据:User [id=1, name=xuwujing, age=20]

第二次测试:

事先还是把数据库id为1的数据给删除!

使用进行POST请求

:8182/api/user/test4

Body参数为:

{"id":1,"name":"xuwujing","age":21}

控制台打印的数据:

请求参数:User [id=1, name=xuwujing, age=21] 查询的数据1:null 查询的数据2:User [id=1, name=xuwujing, age=21] 发生异常,进行手动回滚! 模拟一个异常! 最后查询的数据:null

根据上述的两次测试,我们可以得出使用手动控制事物完全ok,只要提交了事物,即使后面发生了异常也不回影响之前的写入!如果在控制的范围之类发生了异常,也可以进行回滚!

测试示例图:

SpringBoot事物Transaction实战讲解教程


SpringBoot事物Transaction实战讲解教程

其它

参考:
https://www.cnblogs.com/yepei/p/4716112.html

项目地址

SpringBoot 事物Transaction的项目工程地址:
https://github.com/xuwujing/springBoot-study/tree/master/springboot-transactional

SpringBoot整个集合的地址:
https://github.com/xuwujing/springBoot-study

SpringBoot整合系列的文章

springBoot配置文件的读取以及过滤器和拦截器的使用

SpringBoot的Restful风格的服务

SpringBoot+Mybatis+ Druid+PageHelper实现多数据源并分页

SpringBoot整合ElasticSearch实现多版本的兼容

SpringBoot整合Kafka和Storm

SpringBoot整合Jsp和Thymeleaf

SpringBoot整合Netty并使用Protobuf进行数据传输

SpringBoot简单打包部署

SpringBoot整合Redis使用Restful风格实现CRUD功能

SpringBoot优雅的全局异常处理

SpringBoot项目实现文件上传和邮件发送

SpringBoot整合Swagger和Actuator

音乐推荐

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wsxpyw.html