秋招Day17 - Spring - 事務

Spring事務的種類

編程式事務和聲明式事務

介紹一下編程式事務管理?

通過編程的方式顯式控制事務的開始、提交和回滾,一般使用TransactionTemplate的execute方法

介紹一下聲明式事務管理?

基于AOP,通過調用代理對象攔截目標方法,在方法執行前插入事務開始的橫切邏輯,在方法執行后根據執行情況來選擇提交還是回滾。不需要在業務邏輯中顯式的編寫事務相關的代碼,Spring 推薦通過 @Transactional 注解的方式來實現聲明式事務管理,也是日常開發中最常用的。

由于Spring AOP連接點類型的限制,最細粒度只能是方法級別。

Spring的事務傳播機制?

事務傳播機制定義了一個事務方法被另一個事務方法調用時的事務行為,這些行為定義了事務邊界和事務上下文如何在調用鏈中傳播。

默認是Required,也就是說如果當前存在事務,則加入當前事務,如果不存在,則新建事務。

事務傳播機制是通過ThreadLocal實現的,也就是說,如果調用事務的時候使用了一個新線程,則事務傳播機制失效

聲明式事務的實現原理了解嗎?

基于AOP和代理機制。

首先是在Bean的初始化階段創建目標類的代理對象

Spring容器在初始化單例Bean的時候,會遍歷所有的BeanPostProcessor實現類,并執行其 postProcessAfterInitialization 方法檢查這個Bean的類或方法上有沒有@Transactional,如果有的話,Spring就知道這個Bean需要事務增強,會為其通過JDK動態代理或者CGLIB代理生成一個代理對象,實際注入這個Bean的時候注入的是代理對象。

然后通過代理對象攔截需要被事務增強的目標方法,轉發到事務攔截器的invoke方法中,這個方法中會插入事務開啟、提交或回滾的橫切邏輯,是一種環繞增強

聲明式事務在哪些情況下會失效?

如果 @Transactional 注解應用在非 public 修飾的方法上,Transactional 將會失效。

@Transactional 注解中的事務傳播機制屬性配置錯誤,默認是Required

@Transactional 注解中的rollbackFor屬性配置錯誤,默認是unchecked異常和Error下回滾

同一個類中調用事務方法,因為只有在聲明@Transactional 注解的類外調用事務方法才能生成代理對象

一個事務方法調用另一個事務方法時,用try-catch捕獲了另一個事務方法的異常

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

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

相關文章

多維基分析求導法則

對于n維點R0(I1,I2,I3,......In)如果到R(I1, I2 , I3 ,......,In )有基分析求導定理:即R0 R0 *(x1 ,x2 ,x3 ,.............xn) R當I1,I2,....,In獨立不能轉化時有了獨立變量的求導和積分不相干法則…

Java值傳遞和構造函數

一.Java值傳遞首先我們來看一串代碼:輸出 10 20,而不是20 10 這是為什么呢?有內存圖可以知道,這個change方法所改變的東西最終沒有寫回到main之中,且他傳的是具體的數據,所以還會輸出原數據,就相…

電商項目_秒殺_架構及核心

秒殺架構設計先看下普通web項目架構: (Nginx : 反向代理、負載均衡,一般是運維部分做生產搭建的時候配置好)秒殺架構設計:和普通架構區別:原先由Web 服務或Nginx服務提供的靜態資源放到了CDNNginx的職責放?…

4x4矩陣教程

4x4矩陣教程 1. 簡介 四維矩陣是計算機圖形學和3D變換中的重要工具&#xff0c;用于表示三維空間中的仿射變換。本教程將介紹如何使用C實現四維矩陣的基本運算和變換。 2. 代碼實現 2.1 頭文件 (matrix4x4.h) #ifndef MATRIX4X4_H #define MATRIX4X4_H#include <array> #…

Oracle 數據庫共享池與大池調優指南

在 Oracle 數據庫的內存管理中&#xff0c;共享池&#xff08;Shared Pool&#xff09;和大池&#xff08;Large Pool&#xff09;是 SGA&#xff08;系統全局區&#xff09;中負責緩存與資源分配的核心組件。合理配置和調優這兩個池&#xff0c;能顯著提升數據庫性能 —— 尤其…

C# Lambdab表達式 Var 類

Lambdab 是用于創建一個方法的表達式Func<參數1類型, 參數2類型, 返回值類型> fnName >(參數1 參數2) {方法代碼體}Func<int, int, bool> fnName (int a, int b) > {return a > b; };//調用時和普通方法一致 Console.WriteLine(fnName(10,20)); // false…

【Python】常見模塊及其用法

文章目錄1. 什么是模塊和包&#xff1f;2. 常見的模塊及其用法2.1 time概覽2.1.1 時間獲取方法2.1.2 時間格式化與解析2.1.3 程序計時與延遲2.1.4 時間轉換2.2 random概覽2.2.1 基本隨機數2.2.2 隨機整數2.2.3 序列操作2.2.4 概率分布2.2.5 隨機種子2.2.6 狀態管理2.3 os概覽2.…

洛谷 P3478 [POI 2008] STA-Station

【題目鏈接】 洛谷 P3478 [POI 2008] STA-Station 【題目考點】 1. 樹形動規&#xff1a;換根動規 換根動規&#xff0c;又名二次掃描法&#xff0c;一般是給一顆不定根樹&#xff0c;通過兩次掃描來求解。 我們可以先任選一個根結點root&#xff0c;通過樹形動規的思想計算…

【爬蟲】03 - 爬蟲的基本數據存儲

爬蟲03 - 爬蟲的數據存儲 文章目錄爬蟲03 - 爬蟲的數據存儲一&#xff1a;CSV數據存儲1&#xff1a;基本介紹2&#xff1a;基本使用3&#xff1a;高級使用4&#xff1a;使用示例二&#xff1a;JSON數據存儲1&#xff1a;基礎json讀寫2&#xff1a;字符串和對象的轉換3&#xff…

深入分析計算機網絡數據鏈路層和網絡層面試題

計算機網絡體系結構1. 請簡述 OSI 七層模型和 TCP/IP 四層模型&#xff0c;并比較它們的異同。OSI 七層模型&#xff1a;應用層&#xff1a;直接為用戶的應用進程提供服務&#xff0c;如 HTTP&#xff08;超文本傳輸協議&#xff0c;用于 Web 瀏覽器與服務器通信&#xff09;、…

云服務器新裝的mysql8,無法通過遠程連接,然后本地pymysql也連不上

阿里云服務器&#xff0c;用apt-get新裝的mysql-server&#xff0c;竟然無法通過遠程連接到&#xff0c;竟然是這個原因。不是防火墻&#xff0c;iptables早就關了。也不是安全組&#xff0c;不是人為限制訪問的話&#xff0c;根本沒必要弄安全組 排查過程 netstat -antop|grep…

質量即服務:從測試策略到平臺運營的全鏈路作戰手冊

&#xff08;零&#xff09;為什么需要“質量即服務” 當業務方說“今晚一定要上線”&#xff0c; 當開發說“我只改了兩行代碼”&#xff0c; 當運維說“回滾窗口只有 5 分鐘”&#xff0c; 質量必須像水電一樣隨取隨用&#xff0c;而不是上線前的大壩泄洪。 這篇手冊提供一張…

Java -- 自定義異常--Wrapper類--String類

自定義異常&#xff1a;概念&#xff1a;當程序中出現了某些錯誤&#xff0c;但該錯誤信息并沒有在Throwable子類中描述處理&#xff0c;這個時候可以自己設計異常&#xff0c;用于描述該錯誤信息。步驟&#xff1a;1. 定義類&#xff1a;自定義異常類名&#xff08;程序員自己…

一文速通《線性方程組》

目錄 一、解題必記知識點 二、解題必備技巧 三、非齊次線性方程組求解 四、齊次線性方程組求解 ★五、解析題目信息&#xff0c;獲取暗含條件 一、解題必記知識點 (1) (2)基礎解系線性無關&#xff0c;基礎解系 解空間的一個基&#xff0c;基 一組線性無關的、能夠生…

【Django】DRF API版本和解析器

講解 Python3 下 Django REST Framework (DRF) API 版本控制解析器&#xff08;Parser&#xff09;一、DRF API 版本控制詳解 API 版本控制是構建健壯、可維護的 RESTful API 的關鍵&#xff0c;尤其在項目演進中需要兼容不同版本的客戶端請求。 1.1 API 版本控制的核心原理 AP…

Windows系統暫停更新工具

功能說明 暫停更新至2999年恢復系統更新徹底禁用更新&#xff08;不可逆&#xff09; 使用方法 下載解壓后雙擊運行 .bat 文件 輸入數字選擇功能&#xff1a; 輸入 1&#xff1a;暫停更新至2999年&#xff08;推薦&#xff09;輸入 2&#xff1a;恢復系統更新輸入 3&#xf…

git push新版問題解決

git 好像不能通過username:password的方式來git push了。但我的電腦依然彈出username和password的彈窗。轉戰ssh來git push。由于之前是用git clone克隆的&#xff0c;需要再轉換成ssh的url來git push。

PyCharm + AI 輔助編程

PyCharm AI&#xff1a;初學者友好的 2 個實用場景&#xff08;附操作步驟&#xff09; PyCharm 專業版&#xff08;或通過插件集成&#xff09;支持 AI 輔助編程&#xff08;如 JetBrains AI 或 GitHub Copilot&#xff09;&#xff0c;能根據代碼上下文自動生成代碼、解釋邏…

瘋狂星期四文案網第15天運營日記

網站運營第15天&#xff0c;點擊觀站&#xff1a; 瘋狂星期四 crazy-thursday.com 全網最全的瘋狂星期四文案網站 運營報告 昨日訪問量 昨天只有20來ip, 太慘了&#xff0c;感覺和最近沒有發新段子有關&#xff0c;也沒有發新的外鏈&#xff0c;不知道這周四會怎么樣 昨日搜…

如何解決pip安裝報錯ModuleNotFoundError: No module named ‘Cython’問題

【Python系列Bug修復PyCharm控制臺pip install報錯】如何解決pip安裝報錯ModuleNotFoundError: No module named ‘Cython’問題 摘要 在使用 PyCharm 控制臺或命令行執行 pip install Cython 時&#xff0c;常會遇到 ModuleNotFoundError: No module named Cython 的報錯。本…