主頁 > 後端開發 > spring的事務是如何回滾的、事務傳播?

spring的事務是如何回滾的、事務傳播?

2022-01-23 06:08:47 後端開發

實際上也是問的這個問題  spring的事務管理是如何實作的?
總:

spring的事務是由aop來實作的,首先要生成具體的代理物件,然后按照aop的整套流程來執行具體的操作邏輯,正常情況下要
通過通知來完成核心功能,但是事務不是通過通知來實作的,而是通過一個TransactionInterceptor來實作的,然后呼叫invoke來實作具
體的邏輯


分:

1、先做準備作業,決議各個方法上事務相關的屬性,根據具體的屬性來判斷是否開始新事務
2、當需要開啟的時候,獲取資料庫連接,關閉自動提交功能,開起事務
3、執行具體的sqI邏輯操作
4、在操作程序中,如果執行失敗了,那么會通過completeTransactionAfterThrowing看來完成事務的回滾操作,回滾的具體邏
   輯是通過doRollBack方法來實作的,實作的時候也是要先獲取連接物件,通過連接物件來回滾
5、如果執行程序中,沒有任何意外情況的發生,那么通過commitTransactionAfterReturning來完成事務的提交操作,提交的
   具體邏輯是通過doCommit方法來實作的,實作的時候也是要獲取連接,通過連接物件來提交
6、當事務執行完畢之后需要清除相關的事務資訊cleanupTransactionInfo

 

 

spring傳播特性有7種

 

 

某一個事務嵌套另一個事務的時候怎么辦?
A方法呼叫B方法,AB方法都有事務,并且傳播特性不同,那么A如果有例外,B怎么辦,B如果有例外,A怎么辦?


總:

  事務的傳播特性指的是不同方法的嵌套呼叫程序中,事務應該如何進行處理,是用同一個事務還是不同的事務,當出現例外的
時候會回滾還是提交,兩個方法之間的相關影響,在日常作業中,使用比較多的是required,Requires_new,nested


分:

1、先說事務的不同分類,可以分為三類:支持當前事務,不支持當前事務,嵌套事務
2、如果外層方法是required,內層方法是,required,requires_new,nested
3、如果外層方法是requires_new,內層方法是,required,requires_new,nested
4、如果外層方法是nested,內層方法是,required,requires_new,nested
核心處理邏輯非常簡單:
1、判斷內外方法是否是同一個事務:
是:例外統一在外層方法處理
不是:內層方法有可能影響到外層方法,但是外層方法是不會影響內層方法的
(大致可以這么理解,但是有個別情況不同,neste)

 

1、REQUIRED和NESTED回滾的區別
  在回答兩種方式區別的時候,最大的問題在于保存點的設定,很多同學會認為內部設定REQURED和NESTED效果是一樣的,其實在外層方法對內層方法的例外情況在進行捕獲的時候區另
都不同,使用RECSJIRED的時候,會報Transaction rolled back because it has been marked as rollback-only資訊,因為內部例外了,設定了回滾標記,外部捕獲之后,要進行事務的提交,
意味著要回滾,所以會報例外,而NESTED不會發證這種情況,因為在回滾的時候把回滾標記清除了,外部捕獲例外后去提交,沒發現回滾標記,就可以正常提交了,


2、REQUIRED_NEW和REQUIRED區別
  這兩種方式產生的效果是一樣的,但是REQUIRED_NEW會有新的連接生成,而NESTED使用的是當前事務的連接,而且NESTED還可以回滾到保存點,REQUIRED_NEW每次都是一個新的事
務的回滾,但NESTED其實是一個事務,外層事務可以控制內層事務的回滾,內層就算沒有例外,外層出現例外,也可以全部回滾,

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/418999.html

標籤:Java

上一篇:里氏替換原則

下一篇:返回列表

標籤雲
其他(135864) Python(24220) JavaScript(15072) Java(14731) C(11146) 區塊鏈(8215) AI(6884) 基礎類(6313) MySQL(5224) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4203) Linux(4116) PHP(3814) C#(3716) 爪哇(3561) html(3374) C語言(3288) C++語言(3117) sql(3024) R(2776) 熊猫(2774) Java相關(2746) 数组(2739) 疑難問題(2699) 反应(2482) 單片機工控(2479) css(2105) 数据框(1968) Web開發(1951) 节点.js(1938) VBA(1919) 網絡通信(1793) 蟒蛇-3.x(1774) 數據庫相關(1767) VB基礎類(1755) .NETCore(1671) ASP.NET(1650) 開發(1646) 系統維護與使用區(1617) C++(1582) 列表(1581) 基礎和管理(1579) json(1568) JavaEE(1566) 安卓(1523) HtmlCss(1518) 專題技術討論區(1515) Windows客戶端使用(1484) 扑(1469) iOS(1432) 查询(1408) .NET技术(1402) 打字稿(1376) Unity3D(1366) VCL組件開發及應用(1353) sql-server(1287) Qt(1283) 细绳(1226) HTML(CSS)(1220)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • spring的事務是如何回滾的、事務傳播?

    實際上也是問的這個問題 spring的事務管理是如何實作的?總: spring的事務是由aop來實作的,首先要生成具體的代理物件,然后按照aop的整套流程來執行具體的操作邏輯,正常情況下要通過通知來完成核心功能,但是事務不是通過通知來實作的,而是通過一個TransactionInterceptor來 ......

    uj5u.com 2022-01-23 06:08:47 more
  • 里氏替換原則

    1.里氏替換原則的定義 里氏替換原是繼承復用的基礎,它反映了基類與子類之間的關系,是對開閉原則的補充,是對實作抽象化的具體步驟的規范。 所有參考基類(父類)的地方必須能透明地使用其子類的物件。 2.里氏替換原則的作用 里氏替換原則的主要作用如下。 里氏替換原則是實作開閉原則的重要方式之一。 它克服了 ......

    uj5u.com 2022-01-23 06:07:39 more
  • 動態代理jdk的Proxy與spring的CGlib

    1. 為什么要使用動態代理? 動態代理:在不改變原有代碼的情況下上進行物件功能增強 使用代理物件代替原來的物件完成功能 進而達到拓展功能的目的 2.JDK Proxy 動態代理面向介面的動態代理 特點: 一定要有介面和實作類的存在 代理物件增強的是實作類 在實作介面的方法重寫的方法 生成的代理物件只 ......

    uj5u.com 2022-01-23 06:07:35 more
  • 【SpringCloud-Alibaba系列教程】2.搭建用戶微服務模塊

    本節是陸續搭建系統和編碼的開始,我們會優先完成一個基礎工程的創建。一般在互聯網企業這部分作業可能不需要反復處理,只需要在承接產品需要后使用腳手架或者直接復制以往工程就可以創建現有需要使用的工程了。例如 Spring 官網也提供了創建工程的腳手架,https://start.spring.io Spr ......

    uj5u.com 2022-01-23 06:07:31 more
  • C primer plus筆記之初識C語言

    初識C語言 --本文參考書籍: Stephen Prata的《C Primer Plus》 ##前言 C 語言是一門抽象的、面向程序的語言,C 語言廣泛應用于底層開發,C 語言在計算機體系中占據著不可替代的作用,可以說 C 語言是編程的基礎,也就是說,不管你學習任何語言,都應該把 C 語言放在首先要 ......

    uj5u.com 2022-01-23 06:06:43 more
  • 如何防止file:///中的html訪問互聯網?

    背景場景是我想給我的用戶一個 javascript,他們可以用它來分析他們敏感的私人資料,我希望他們感到安全,這些資料不會被發送到互聯網。最初,我想我只是將它作為一個帶有 embeded...

    uj5u.com 2022-01-23 05:52:44 more
  • AndroidTV應用被拒絕,未提供更多詳細資訊/門票被忽略

    我的應用程式多次被 Google Play 拒絕,原因如下:取決于選單 您的應用程式依賴于“開始”、“選擇”或“選單”按鈕來訪問選單。Android TV 控制器不支持“選擇”、“開始”或...

    uj5u.com 2022-01-23 04:03:02 more
  • 如何設計RESTAPI來要求服務器等待資源版本到達GET請求?

    我致力于將單體應用拆分為微服務。有了單體應用,我有一個單一的事實來源,并且可以GET /resources/123立即PATCH /resources/123確保資料庫具有我需要的最新資料。有了微服務和...

    uj5u.com 2022-01-22 21:17:40 more
  • 微服務應該呼叫自身還是呼叫內部函式

    我正在為我的公司做一個舊專案,我發現了一個奇怪的代碼實踐。我們有多個 API:Account/CostumerInformations => Should return all informationAcount/CostumerName => Return...

    uj5u.com 2022-01-22 21:14:10 more
  • HTTP頭回傳的位置是否應該有版本資訊?

    是否有關于由 REST 服務器重新調整的位置是否還應包含版本資訊的標準或約定?根據 REST,URI 指向資源,因此根據該定義,Location標頭中回傳的 URI 不應具有版本。但是GET服務器回...

    uj5u.com 2022-01-22 21:13:17 more