什么是事务
举个例子,我们去银行取钱,银行卡的钱减少和你拿到钱本身是一个事务,你不可能卡额减少了,不要钱,银行也不可能在你卡上的钱没有减少,而把钱给你,那银行也不愿意。
在我们编程方面的体现是就是一些执行单元,要么一起成功,要么一起失败,在传统意义上的同一时刻,不同业务逻辑对同一种数据进行修改,很可能会发生混乱,所以我们需要事务来进行管理。
事务具备四大特性,原子性,一致性,隔离性,持久性,自身的单元之间具备不可分割的特性。
Springboot是什么
Springboot当然是spring发展到一定程度的产物了,你说它是spring的替代品,也许是不合理的,但是springboot可以更简单的使用spring,让一大堆的配置文件再也不需要程序员去配置。
Springboot搭建速度是惊人的,几秒,你没有听错,几秒就可以快读搭建一个项目,有了它,测试变得更简单了,因为一个注解就可以实现了,自身内嵌tomacat,省去了还要维护tomacat的工作,并且方便监控。
Springboot事务是什么
我们利用springboot的框架使用事务就是springboot事务。
Springboot事务如何实现
我们在自己写的java类上加上@transactional注解就可以实现本地的事务,如果我们需要用springboot事务,我们还要在自定义的配置类上加上@EnableTransactionManagement来启动事务。
在加注解的类中,我们对同一数据表的增删改查就成了原子性的了。假设我们对三个表执行删除操作,假设有一个删除失败,则另外执行成功的删除操作也会回到未删除之前的状态。
测试下springboot事务是如何运行的
新建juint测试用例:
进入debug模式,我们测试下对数据的新增,为了能够复现数据的回滚,我们的入参是空的集合,打断点进入该方法。
可以看到cglib代理了dataCollectionShareService,那它必定会走intercept 方法,进入
DynamicAdvisedInterceptor的动态代理。既然进入了拦截器,那么其有通知器吗?
通过调试我们发现了一个通知器,一个知识点,事务拦截器如果其通知链不变,就会依次执行。
接着向下走,会发现一个叫invoke的方法
此方法的逻辑为:
获取事务属性,根据事务属性,获取事务管理器,如果有异常执行方法,调用事务回滚,如果没有异常,调用另外一个方法,提交事务,返回信息。
举报/反馈

怡子科技

5.3万获赞 2259粉丝
某知名互联网技术总监
科技领域爱好者,科技领域爱好者
关注
0
0
收藏
分享