控制台打印的数据:
请求参数: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,只要提交了事物,即使后面发生了异常也不回影响之前的写入!如果在控制的范围之类发生了异常,也可以进行回滚!
测试示例图:
其它
参考:
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的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
音乐推荐