如何通过手写代码实现SpringBoot中的本地事务管理,并掌握其核心原理?
- 内容介绍
- 文章标签
- 相关推荐
本文共计2909个文字,预计阅读时间需要12分钟。
白菜Java自习室+浅显核心理解+1. SpringBoot+事务+直接在用SpringBoot中的@Transactional来做事务管理,但很少想过SpringBoot是如何实现事务管理的。今天从源码入手,看看@Transactional是如何实现的。
白菜Java自习室 涵盖核心知识
1. SpringBoot 事务
一直在用 SpringBoot 中的 @Transactional 来做事务管理,但是很少没想过 SpringBoot 是如何实现事务管理的,今天从源码入手,看看 @Transactional 是如何实现事务的,最后我们结合源码的理解,自己动手写一个类似的注解来实现事务管理,帮助我们加深理解。
1.1. 事务的隔离级别
事务为什么需要隔离级别呢?这是因为在并发事务情况下,如果没有隔离级别会导致如下问题:
- 脏读 (Dirty Read) :当A事务对数据进行修改,但是这种修改还没有提交到数据库中,B事务同时在访问这个数据,由于没有隔离,B获取的数据有可能被A事务回滚,这就导致了数据不一致的问题。
- 丢失修改 (Lost To Modify):当A事务访问数据100,并且修改为100-1=99,同时B事务读取数据也是100,修改数据100-1=99,最终两个事务的修改结果为99,但是实际是98。事务A修改的数据被丢失了。
- 不可重复读 (Unrepeatable Read):指A事务在读取数据X=100的时候,B事务把数据X=100修改为X=200,这个时候A事务第二次读取数据X的时候,发现X=200了,导致了在整个A事务期间,两次读取数据X不一致了,这就是不可重复读。
本文共计2909个文字,预计阅读时间需要12分钟。
白菜Java自习室+浅显核心理解+1. SpringBoot+事务+直接在用SpringBoot中的@Transactional来做事务管理,但很少想过SpringBoot是如何实现事务管理的。今天从源码入手,看看@Transactional是如何实现的。
白菜Java自习室 涵盖核心知识
1. SpringBoot 事务
一直在用 SpringBoot 中的 @Transactional 来做事务管理,但是很少没想过 SpringBoot 是如何实现事务管理的,今天从源码入手,看看 @Transactional 是如何实现事务的,最后我们结合源码的理解,自己动手写一个类似的注解来实现事务管理,帮助我们加深理解。
1.1. 事务的隔离级别
事务为什么需要隔离级别呢?这是因为在并发事务情况下,如果没有隔离级别会导致如下问题:
- 脏读 (Dirty Read) :当A事务对数据进行修改,但是这种修改还没有提交到数据库中,B事务同时在访问这个数据,由于没有隔离,B获取的数据有可能被A事务回滚,这就导致了数据不一致的问题。
- 丢失修改 (Lost To Modify):当A事务访问数据100,并且修改为100-1=99,同时B事务读取数据也是100,修改数据100-1=99,最终两个事务的修改结果为99,但是实际是98。事务A修改的数据被丢失了。
- 不可重复读 (Unrepeatable Read):指A事务在读取数据X=100的时候,B事务把数据X=100修改为X=200,这个时候A事务第二次读取数据X的时候,发现X=200了,导致了在整个A事务期间,两次读取数据X不一致了,这就是不可重复读。

