支付项目中使用了spring事务,团队成员在开发过程中还是有很多问题,所以我也从头到尾又梳理了一遍。文章主要从概念、原理、及使用整个过程进行复盘,目的是为开发者提供一些指导。
这篇文章几乎涵盖了项目开发中遇到的、使用到的事务的所有的知识点,非常全面,也包括了问题的解决方案和经验。文章较长,建议大家收藏起来慢慢看。下面开始 ---- 撸正文!
理解事务的概念
我们平时所说的事务其实指的是数据库的事务,在springboot框架种提供了对数据库事务的管理,所以,spring事务和数据库事务本质上是同一个概念,spring事务是对数据库事务的封装,最后本质的实现还是在数据库,如果数据库不支持事务,spring事务是不起作用的。数据库事务比较简单,就只有开启、回滚和关闭,spring的事务管理器完成了对数据库事务的包装,原理就是拿一个数据连接,根据spring的事务配置,操作这个数据连接,对数据库进行事务开启、回滚或关闭操作。但是spring除了实现这些,还配合spring的传播行为和隔离级别等,对事务进行了更广泛的管理。
想搞清楚spring如何对事务进行管理的,就必须先弄明白数据库事务的概念,想象一下我们平时是否有过这样的操作,当我们打开一个mysql客户端的会话时,写了一个插入语句,执行插入语句后,需要我们手动提交才能将操作入库,而在提交之前,我们在另一个会话(新的连接)去查询这个表,并不能查到当前插入的数据,只有在同一个事务中才能查到。这就体现出了事务的概念,事务一旦提交整个事务就结束了,结束就意味着已经将变更的结果存到了数据库文件中,整个过程就是事务的提交过程。事务在提交之前是可以回滚的,当我们执行完插入语句,而不点提