首页 > 其他分享 >以前文章总结一下事务的原理

以前文章总结一下事务的原理

时间:2022-10-09 10:06:52浏览次数:58  
标签:总结 事务 一个 spring 数据库 问题 文章 注解


 今晚学习了网易微专业的公开课,讲的是事务的相关的问题。这里写一篇文章记录一下。

 # # 先看一下一个简单版的 spring 的事务原理全貌图

以前文章总结一下事务的原理_spring

 

  对于事务问题,之前都是一知半解。

  之前别人一提到事务,我就想到了ACID。我知道开始事务的注解,知道想要使用注解的时候,就在service层类上添加一个注解@Transactional。我以为这样我就知道事务了。但是我不知道我还不知道很多。

  抛出来第一个问题:那么数据库是通过什么来识别是一个事务的?原理是什么?或者说本质是什么?有没有想过,数据库是怎么识别到底哪些sql 是同一个事务呢?如果让你自己来处理事务,你准备怎么写呢?

  首先回答一下上边的一个问题:数据库和程序交互,是通过同一个数据库连接来判断是不是同一个事务的。如果不用spring给我们提供的事务,让我们自己来实现,其实就是创建一个数据库连接,创建一个事务,然后设置上不要自己提交事务,也就是手动提交,然后再处理,比方说写了一组sql,然后都执行完了就提交事务,如果发生了问题就回滚。

  另外一个问题,如果不同的线程来访问,对于一个数据库连接,是不是事务就失去了隔离性。那么判断同一个数据库链接的,应该放在哪里?不妨学学框架,框架是放在一个TransactionalManager 容器里边,并且这个使用 ThreadLocal 修饰的。ThreadLocal 最大的作用就是用来防治不同的线程访问到同一个变量。使用了ThreadLocal  以后,就解决了不同线程破坏事务隔离的问题。源码里边的 TransactionalManager  也是用来存放数据库连接的。

  每次都通过创建一个事务,最后再提交的方式,能解决问题,但是是不是太粗鲁了?一点都不优雅。想想spring 的 AOP,通过切面的形式,就恰好能帮我们优雅的解决这个问题。就是环绕通知,在方法执行前,创建一个事务,然后方法执行后提交事务。想一下,我们在使用事务的时候,是不是就添加了一个注解@Transaction,其实这个注解就是一个标示,然后在AOP处理里边做一个判断,只要是 用了@Transaction的方法,就统统进行事务的处理。

  到这里就结束了。只不过spring实现的事务,解决更多的问题,更复杂的问题,比方事务的传播呀,等等

   

   

标签:总结,事务,一个,spring,数据库,问题,文章,注解
From: https://blog.51cto.com/u_15812686/5739739

相关文章

  • 分布式事务
     学习一下分布式事务。 这篇文章尽可能的压缩篇幅,不做过多的介绍,像什么是事务就不介绍了。 # # 什么是分布式事务 分布式事务一定来源于多数据源。如果只有一个数据......
  • spring 的相关的事务失效的问题总结
     这一个问题,真的是很有意思。之前不了解的时候觉得会用就行了。但是真的不知道里边这么多坑。不过这些坑都真的很有意思。它推着你去了解底层。推着你看源码,了解实现原理......
  • 【博学谷学习记录】超强总结,用心分享|Java基础分享-数据结构(数组、链表)
    目录1.数组2.链表2.1.链表简介2.2.链表分类2.2.1.单链表2.2.2.循环链表2.2.3.双向链表2.2.4.双向循环链表1.数组数组(Array) 是一种很常见的数据结构。......
  • 2022-10-08 本周纳斯达克三买三卖总结
    这一周总体就是个震荡趋势。做了周三和周五的空单。是按照,只要是中枢突破,出现三买三卖就开始做。日线来看,还在2个下降趋势线下面。 周三走势30分钟   5分钟图......
  • 10月8日内容总结——文件操作之文本模式和二进制模式、文件内光标的移动
    目录一、文件操作1、概念讲解2、通过代码打开文件的两种方式方式一:方法二:一些小知识点总结:二、文件的读写模式1、只读模式(r)2、只写模式(w)3、只追加模式(a)三、文件的操作模式......
  • 2022-2023-1 20221406《计算机基础与程序设计》第六周学习总结
    2022-2023-120221406《计算机基础与程序设计》第六周学习总结班级链接:https://edu.cnblogs.com/campus/besti/2022-2023-1-CFAP学习目标:Polya如何解决问题简单类型与......
  • 锐化调试总结
    1、锐化的作用及做锐化的原因锐化实际就是对边界的增强,它会增加边界的锐利度,但不会带来更多的内容,做锐化的原因是由于一开始isp从sensor采数据的时候,就做了下采样,这对边......
  • day08-MySQL事务
    MySQL事务先来看一个例子有一张balance表:需求:将tom的100块钱转到King账户中执行的操作是:updatebalancesetmoney=money-100whereid=100updatebalanc......
  • Spring事务管理
    Spring事务管理1.1、什么是事务(Transaction)是并发控制的单元,是用户定义的一个操作序列。这些操作要么都做,要么都不做,是一个不可分割的工作单位。通过事务,sql能将逻辑相关......
  • 20221415_获奖感言及学习总结
    20221415_获奖感言及学习总结获奖感言很荣幸可以获得娄老师的奖品。我会再接再厉学好编程。学习总结敢学、不服输的态度C语言最开始的学习无疑是痛苦的,如果一直对......