Spring事務的實現原理

Spring事務原理

Spring框架支持對于事務的管理功能,開發人員使用Spring框架能極大的簡化對于數據庫事務的管理操作,不必進行手動開啟事務,提交事務,回滾事務,就是在配置文件或者項目的啟動類配置Spring事務相關的注解驅動,使用@Transaction注解即可,既開啟并使用Spring事務管理功能

Spring事務分類

通過Spring管理的事務可以分為邏輯事務和物理事務兩大類

  • 邏輯事務:通過指通過Spring等框架管理的事務,這種事務建立在物理事務之上,比物理事務更加抽象
  • 物理事務:通常指的是針對特定數據庫的事務

Spring支持兩種事務聲明式方式,分別是編程式事務和聲明式事務

  • 編程式事務:如果系統需要明確事務,并且需要細粒度的控制各個事務的邊界,此時建議使用編程式事務
  • 聲明式事務:如果系統對事務的控制粒度比較粗糙,則建議使用聲明式事務

Spring的事務三大接口

  1. PlatformTransactionManager接口:為Hibernate、Mybatis、JTA等持久化框架提供事務管理器,具體的實現由框架自己實現
  2. TransactionDefinition接口:主要定義和事務相關的方法,表示事務屬性的常量等信息。部分事務屬性的常量和Propagation枚舉類中的事務傳播類型相對應
  3. TransactionStatus接口:主要用來存儲事務執行的狀態,并且定義了一組方法,用于判斷或者讀取事務的狀態信息

Spring事務隔離級別???????

Spring中存在5中隔離級別主要為:

  • ISOLATION_DEFAULT:該級別是Spring中默認的事務隔離級別
  • ISOLATION_READ_UNCOMMITTED(讀未提交):是Spring中最低的隔離級別,事務A能夠讀取到事務B未提交的數據,會出現臟讀、不可重復讀、幻讀
  • ISOLATION_READ_COMMITTED(讀已提交):可以保證事務A的只有事務提交后事務B才能讀取到事務A的數據,會出現不可重復讀、幻讀
  • ISOLATION_REPEABLE_READ(可重復讀):可以保證不會出現臟讀和不可重復讀的問題,但是會出現幻讀的問題
  • ISOLATION_SERIALIZABLE(可串行化):事務只能按照特定的順序執行,多個事務之間只能按照串行化的順序執行,這個是最可靠的隔離級別,并發性最差

Spring事務傳播機制(7種)

?????????支持當前事務的事務傳播機制:REQUIRED、SUPPORTS、MANDATORY

????????不支持當前事務的事務傳播機制:REQUIRED_NEW、NOT_SUPPORTS、NEVER

????????嵌套事務機制:NESTED

注意點:枚舉類Propagation集合@Transaction注解使用,枚舉類中定義的事務傳播行為類型與TransactionDefinition接口定義的事務傳播類型相對應,在使用@Transaction注解時,使用的是Propagation枚舉類中的事務傳播類型,而不是直接使用TransactionDefinition接口中定義的事務傳播類型

  1. REQUIRED事務傳播類型:表示當前沒有事務,就創建一個事務,如果已經存在一個事務,就加入這個事務,Spring默認的事務傳播類型
  2. REQUIRES_NEW事務傳播類型:表示當前存在事務,則把當前事務掛起,并重新創建新的事務并執行,直到新的事務提交或者回滾,才會恢復執行原來的事務。原有事務跟新事務互不影響
  3. SUPPORTS事務傳播類型:表示支持當前事務,如果當前沒有事務,就以非事務的方式執行
  4. MANDATORY:表示支持當前事務,這種事務傳播類型具備強制性,當前操作必須存在事務,如果不存在,則拋出異常
  5. NOT_SUPPORTED事務傳播類型:表示當前以非事務方式執行,如果當前操作在一個事務中,則把當前事務掛起,直到當前操作完成在恢復事務的執行。
  6. NEVER事務傳播類型:表示以非事務的方式執行,如果當前操作存在事務,則拋出異常
  7. NESTED事務傳播類型:表示如果當前方法中有一個事務正在運行,則這個方法應該運行在一個嵌套事務中,被嵌套的事務可以獨立于被封裝的事務進行提交或者回滾,如果沒有活動事務,則按照REQUIRED事務傳播類型執行

Srping中常用的事務傳播類型

????????7種事務傳播機制類型,日常工作上主要使用只有REQUIRED、NOT_SUPPORTED、REQUIRES_NEW三種

????????REQUIRED:Spring中默認的傳播機制,適用于大部分場景

????????NOT_SUPPORTED:適用于發送提示信息、站內信、短信、郵件等,這類場景要求不影響系統的主體業務邏輯,即使操作失敗也不應該對主體邏輯產生影響,不能使主體邏輯的事務回滾

????????REQUIRES_NEW:總是創建新的事務執行,適用于不受外層方法事務影響的場景。例如記錄日志的操作,不管主體業務邏輯是否已經完成,日志都要記錄下來,不能因為主體業務邏輯異常事務回滾導致日志記錄不到

Spring 事務失效的場景

  • 數據庫不支持事務:Spring事務生效的前提是連接的數據庫支持事務,如果底層不支持事務,則Spring的事務肯定會失效,例如Mysql的MyISAM存儲引擎
  • 事務方法沒有被Spring管理:事務方法所在的類沒有加載到Spring IOC容器中,事務方法所在的類沒有被Spring管理,則食物會失效
  • 方法沒有被public修飾:此時事務也會失效
  • 同一個類中的方法調用:如果同一個類的方法A上添加了事務注解,方法B上添加了事務注解,方法A調用方法B,則方法B的事務會失效
  • 未配置事務管理器:如果在項目中沒有配置Spring的事務管理器,即使使用了Spring的事務管理功能,Spring的事務也不會生效
  • 方法的事務傳播類型不支持事務:如果內部方法的事務傳播為不支持事務傳播類型,則內部方法的事務在Spring中會失效
  • 不正確的捕獲異常:如果自己把異常給吃了,那將會導致事務的失效
  • 標準錯誤的異常類型:Spring中默認回滾的事務異常類型為RuntimeException,如果拋出的異常不是RuntimeException 或者其子類,事務將失效

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13027.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13027.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13027.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

什么是最大路徑?什么是極大路徑?

最近學習中,在這兩個概念上出現了混淆,導致了一些誤解,在此厘清。 最大路徑 在一個簡單圖G中,u、v之間的距離 d ( u , v ) min ? { u 到 v 的最短路的長度 } d(u,v) \min \{ u到v的最短路的長度 \} d(u,v)min{u到v的最短路的…

wefaf

c語言中的小小白-CSDN博客c語言中的小小白關注算法,c,c語言,貪心算法,鏈表,mysql,動態規劃,后端,線性回歸,數據結構,排序算法領域.https://blog.csdn.net/bhbcdxb123?spm1001.2014.3001.5343 給大家分享一句我很喜歡我話: 知不足而奮進,望遠山而前行&am…

使用Bash腳本和Logrotate實現Nginx日志切割

Nginx是一個廣泛使用的高性能Web服務器,它能夠處理大量的并發連接,但同時也會生成大量的日志文件。為了有效管理這些日志文件并確保系統的正常運行,我們需要定期對Nginx的日志文件進行切割和歸檔。本文將介紹如何使用Bash腳本和Logrotate來實…

每天Get一個小技巧:用DolphinScheduler實現隔幾天調度

轉載自tuoluzhe8521 這篇小短文將教會你如何使用Apache DolphinScheduler實現隔幾天調度,有此需求的小伙伴學起來! 1 場景分析 DolphinScheduler定時器模塊-定時調度時每3秒|每3分鐘|每3天這種定時,不能夠跨分鐘,跨小時&#x…

【C++】:string類的基本使用

目錄 引言一,string類對象的常見構造二,string類對象的容量操作三,string類對象的訪問及遍歷操作四,string類對象的修改操作五,string類非成員函數六,整形與字符串的轉換 引言 string 就是我們常說的"…

如何對SQL Server中的敏感數據進行加密解密?

為什么需要對敏感數據進行加密? 近幾年有不少關于個人數據泄露的新聞(個人數據通常包含如姓名、地址、身份證號碼、財務信息等),給事發公司和被泄露人都帶來了不小的影響。 許多國家和地區都出臺了個人數據保護的法律法規&#…

Unity Animation--動畫窗口指南(使用動畫視圖)

Unity Animation--動畫窗口指南(使用動畫視圖) 使用動畫視圖 window -> Animation 即可打開窗口 查看GameObject上的動畫 window -> Animation -> Animation 默認快捷鍵 Ctrl 6 動畫屬性列表 在下面的圖像中,“動畫”視圖&am…

思科模擬器--2.靜態路由和默認路由配置24.5.15

首先,創建三個路由器和兩個個人電腦。 接著,配置兩臺電腦的IP,子網掩碼和默認網關 對Router 0,進行以下命令: 對Router進行以下命令: 對Router2進行以下命令: 本實驗完成。 驗證:PC…

Vue3+ts(day06:路由)

學習源碼可以看我的個人前端學習筆記 (github.com):qdxzw/frontlearningNotes 覺得有幫助的同學,可以點心心支持一下哈(筆記是根據b站上學習的尚硅谷的前端視頻【張天禹老師】,記錄一下學習筆記,用于自己復盤,有需要學…

【ARMv8/v9 系統寄存器 5 -- ARMv8 Cache 控制寄存器 SCTRL_EL1 使用詳細介紹】

關于ARM Cache 詳細學習推薦專欄: 【ARM Cache 專欄】 【ARM ACE Bus 與 Cache 專欄】 文章目錄 ARMv8/v9 Cache 設置寄存器ARMv8 指令 Cache 使能函數測試代碼 ARMv8/v9 Cache 設置寄存器 關于寄存器SCTRL_EL1 的詳細介紹見文章:【ARMv8/v9 異常模型入…

純正英語新聞 5.15

seizing territory :奪取領土 battlefield:戰場 shrinking:縮小 paramedic:醫護人員 mercilessly destroy:無情地摧殘 blown up:炸毀 northern outskirts :北郊 terrified:害怕 shelling&#xff…

西南大學計算機考研,選學碩還是專碩?西南大學計算機考研考情分析!

西南大學(Southwest University)是教育部直屬,教育部、農業農村部、重慶市共建的重點綜合大學,是國家首批"雙一流"建設高校,"211工程"和"985工程優勢學科創新平臺"建設高校。現任黨委書…

【嵌入式大賽應用賽道】機械手臂

電機 進步電機:它的轉動是以確定的步數進行的,只要計算好脈沖數量和頻率,就可以準確預測和控制電機的轉動角度、速度以及停止的位置 伺服電機:將輸入的電信號(如電壓或電流指令)轉換成軸上的精確旋轉運動…

大模型算法(一):從Transformer到ViT再到LLaMA

單任務/單領域模型 深度學習最早的研究集中在針對單個領域或者單個任務設計相應的模型。 對于CV計算機視覺領域,最常用的模型是CNN卷積模型。其中針對計算機視覺中的不同具體任務例如分類任務,目標檢測任務,圖像分割任務,以CNN作…

【傳知代碼】VRT: 關于視頻修復的模型(論文復現)

前言:隨著數字媒體技術的普及,制作和傳播視頻內容變得日益普遍。但是,視頻中由于多種因素,例如傳輸、存儲和錄制設備等,經常出現質量上的問題,如圖像模糊、噪聲干擾和低清晰度等。這類問題對用戶的體驗和觀…

hive動態分區

hive動態分區概念:允許插入數據到分區表時,根據插入的數據內容自動創建相應的分區 1.啟用動態分區功能 hive.exec.dynamic.partitiontrue; 2.分區字段設置 在insert語句中, 動態分區的字段必須放在select語句的末尾,hive會根據這個字段的值來創建分區目錄 示例: --創建分區表…

幾個排序器的verilog及其資源占用、延時分析

提示:文章寫完后,目錄可以自動生成,如何生成可參考右邊的幫助文檔 前言 因為課題需要,調研了幾個快速排序方法,并手寫或者改進了若干待測試對象,包括記分板型冒泡排序(這個是別人的&#xff09…

樹莓派|I2C通信

什么是I2C通信 I2C(Inter-Integrated Circuit)是一種串行通信協議,用于在集成電路(IC)之間傳輸數據。它由飛利浦公司(現在的恩智浦半導體公司)在20世紀80年代開發,并且成為了廣泛應用于各種電子設備中的通…

Spring Security 6.x 系列【73】認證篇之同端互斥登錄

有道無術,術尚可求,有術無道,止于術。 本系列Spring Boot 版本 3.1.0 本系列Spring Security 版本 6.1.0 源碼地址:https://gitee.com/pearl-organization/study-spring-security-demo 文章目錄 1. 概述2. 實現方案3. 案例演示3.1 內存會話3.1.1 并發控制流程分析3.1.2 功…

【35分鐘掌握金融風控策略28】貸中模型體系策略應用

目錄 貸中模型體系策略應用 信用模型體系和模型在策略中的應用 反欺詐模型體系和模型在策略中的應用 運營模型體系和模型在策略中的應用 貸中模型體系策略應用 在貸前模型部分已經講過,貸前開發的很多模型是可以在貸中直接使用的。貸中與貸前的不同點在于&…