Spring事務傳播機制有哪些?

導語:
Spring事務傳播機制是后端面試中的必考知識點,特別容易出現在“項目細節挖掘”階段。面試官通過它來判斷你是否真正理解事務控制的本質與異常傳播機制。本文將從實戰與源碼角度出發,全面剖析Spring事務傳播機制,幫助你答得有邏輯、有亮點,輕松拿捏核心面試題!


一、面試主題概述

Spring通過 @Transactional 注解支持聲明式事務,其中事務的傳播行為(Propagation)是關鍵參數之一。
所謂“傳播”,是指當一個方法已經在事務中時,另一個方法是否
加入、掛起、開啟新事務
等行為。

這部分不僅是基礎框架知識的體現,更會在多模塊協作、異常回滾設計中決定系統的數據一致性與魯棒性
如果你在項目中經常出現“事務沒生效”“為什么沒回滾”等問題,很可能根源就在傳播機制沒有理解透。


二、高頻面試題匯總

  1. 你了解Spring事務的傳播機制嗎?說說有哪些類型及其區別。
  2. 如果一個方法使用 REQUIRES_NEW,它和外層事務如何互動?
  3. NESTEDREQUIRES_NEW 有什么本質區別?
  4. 實際開發中,哪些場景適合使用 REQUIRES_NEW
  5. 如果 Propagation.NOT_SUPPORTED 的方法拋出異常,外層事務是否受影響?

三、重點題目詳解

1?? 你了解Spring事務的傳播機制嗎?說說有哪些類型及其區別。

答:
Spring支持的事務傳播機制共有7種,分別是:

類型描述
REQUIRED(默認)有事務就加入,沒有就新建一個
REQUIRES_NEW總是開啟新事務,掛起當前事務
NESTED如果存在事務,則開啟嵌套事務(SavePoint保存點)
SUPPORTS有事務就用,沒有就非事務方式執行
NOT_SUPPORTED強制不使用事務,若有事務則掛起
NEVER強制無事務,有事務則拋出異常
MANDATORY必須在事務中運行,若沒有事務則拋出異常

代碼示例:

@Transactional(propagation = Propagation.REQUIRED)
public void outerMethod() {innerService.innerMethod(); // 默認也是 REQUIRED,加入同一事務
}@Transactional(propagation = Propagation.REQUIRES_NEW)
public void innerMethod() {// 會開啟一個新的事務,outerMethod 的事務將被掛起
}

考察點解析:

  • 能否清晰解釋每種傳播機制用途,是考察對事務控制粒度的掌握。
  • 面試官后續可能追問具體的異常場景回滾策略,所以基礎務必打牢。

2?? REQUIRES_NEW 和外層事務的回滾關系?

答:
REQUIRES_NEW 會掛起當前事務,開啟一個全新的事務。兩者是獨立提交、獨立回滾的。

@Transactional
public void outer() {try {inner(); // inner 使用 REQUIRES_NEW} catch (Exception e) {// 捕獲后 outer 可以不回滾}throw new RuntimeException(); // 僅回滾 outer 事務
}@Transactional(propagation = Propagation.REQUIRES_NEW)
public void inner() {// 提交成功,即使 outer 回滾也不影響
}

場景舉例:

  • 記錄日志或審計數據(不能因主流程失敗而丟失)
  • 第三方接口調用結果保存(確保冪等)

3?? NESTEDREQUIRES_NEW 有什么區別?

比較項NESTEDREQUIRES_NEW
是否新建事務否,嵌套當前事務是,掛起當前事務
是否獨立提交否,主事務失敗則全部回滾是,互不影響
實現機制SavePoint(保存點)真正的新事務

代碼示例:

@Transactional
public void parent() {child(); // NESTED,不拋異常不會影響 parentthrow new RuntimeException(); // parent rollback,child 也回滾
}@Transactional(propagation = Propagation.NESTED)
public void child() {// 設置保存點,可在當前事務失敗前“部分提交”
}

考察點解析:

  • 區分是否 “真實隔離”事務邊界 ,是高級候選人的標配能力。
  • 能講出 SavePoint 概念或 Spring 內部事務管理器實現,是加分項。

4?? 實際開發中,哪些場景適合使用 REQUIRES_NEW

  • 記錄操作日志,即使主流程失敗也要保留痕跡。
  • 向第三方服務發送異步通知或郵件(不影響主事務的業務執行)。
  • 系統異常情況下補償事務機制的使用。

踩坑提醒:
使用 REQUIRES_NEW 時需要確保數據庫連接數充足,因為每個新事務需要單獨連接。


5?? 如果 Propagation.NOT_SUPPORTED 的方法拋出異常,外層事務是否受影響?

答:
NOT_SUPPORTED 表示掛起當前事務,以非事務方式執行。此時即使拋出異常,也不會回滾外層事務。

@Transactional
public void outer() {try {noTxMethod(); // NOT_SUPPORTED,非事務執行} catch (Exception e) {// 捕獲后 outer 事務可繼續}// outer方法仍處于事務中
}@Transactional(propagation = Propagation.NOT_SUPPORTED)
public void noTxMethod() {throw new RuntimeException("非事務邏輯異常");
}

考察點解析:

  • 面試官通過這個問題判斷你是否清楚事務掛起與傳播邊界的影響。
  • 理解傳播機制不僅是理論問題,更關乎項目中數據一致性的保障。

四、面試官視角與加分項

Spring事務傳播機制是一個“寬口徑、高落點”的面試入口點:

面試官目的候選人應對方式
考察對分布式一致性理解舉例“日志獨立記錄”或“冪等寫庫”場景
判斷是否有實戰經驗分享 REQUIRES_NEW 踩坑或 NESTED 使用經驗
了解源碼掌握深度簡述事務攔截器 TransactionInterceptor 源碼流程
延伸提問能力準備好 @Transactional 的異常傳播、rollbackFor、嵌套調用等衍生點

加分項:

  • 清晰畫出傳播機制行為對照圖(誰掛起、誰加入、誰隔離)
  • 主動引入“事務傳播 + 異常處理”的組合問題(try-catch 嵌套場景)

五、總結與建議

Spring事務傳播機制雖然是框架中的一環,但它牽涉到數據一致性、模塊職責劃分、異常恢復機制,是后端開發中必須精通的核心能力。

建議你這樣準備:

? 理解每種傳播行為的語義和差異
? 用簡單項目示例演練嵌套調用、異常處理效果
? 準備一兩個項目場景,展示你為什么選這個傳播行為

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

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

相關文章

相機Camera日志實例分析之一:相機Camx【前置慢動作分辨率切換720P、1080P錄制】單幀流程日志詳解

【關注我,后續持續新增專題博文,謝謝!!!】 上一篇我們講了: 這一篇我們開始講: 目錄 一、場景操作步驟 二、日志基礎關鍵字分級如下 三、場景日志如下: 一、場景操作步驟 1、打…

OpenHarmony標準系統-HDF框架之I2C驅動開發

文章目錄 引言I2C基礎知識概念和特性協議,四種信號組合 I2C調試手段硬件軟件 HDF框架下的I2C設備驅動案例描述驅動Dispatch驅動讀寫 總結 引言 I2C基礎知識 概念和特性 集成電路總線,由串網12C(1C、12C、Inter-Integrated Circuit BUS)行數據線SDA和串…

Ubuntu系統下交叉編譯openssl

一、參考資料 OpenSSL&&libcurl庫的交叉編譯 - hesetone - 博客園 二、準備工作 1. 編譯環境 宿主機:Ubuntu 20.04.6 LTSHost:ARM32位交叉編譯器:arm-linux-gnueabihf-gcc-11.1.0 2. 設置交叉編譯工具鏈 在交叉編譯之前&#x…

數據庫優化實戰分享:高頻場景下的性能調優技巧與案例解析

在實際開發與生產運維中,數據庫的性能瓶頸往往是影響系統響應速度和用戶體驗的關鍵因素。尤其是在高并發訪問、海量數據處理、復雜查詢邏輯等高頻場景下,數據庫優化不僅僅是“錦上添花”,更是“雪中送炭”。本篇博文將結合實際項目經驗&#…

Python importlib 動態加載

文章目錄 1. importlib 庫 概述2. 導入模塊(import_module())2.1. 導入已安裝的模塊2.2. 導入子模塊2.3 通過字符串變量導入模塊 3. 重新加載模塊(reload())4. 檢查模塊是否存在(find_spec())5. 獲取模塊路…

(1-6-4) Java IO流實現文件的讀取與寫入

目錄 0.前述概要 1. File類 1.1 概述 1.2 File的重要方法 1.3 java.io 1.3.1 四種抽象類 1.3.2 流 1.3.3 其他常用 I/O 流 2. 字節輸入流(InputSteam) 2.1 關系類圖 2.2 應用實現 3. 字節輸出流(OutputStream) 3.1 …

【Proteus仿真】【32單片機-A010】步進電機控制系統設計

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 聯系作者 一、主要功能 1、LCD顯示當前擋位、方向等; 2、按鍵控制步進電機擋位、方向等。 二、使用步驟 系統運行后,LCD1602顯示當前擋位、方向; 通過按鍵…

DeepSeek-R1-0528-Qwen3-8B為底座微調領域大模型準備:制作領域專用數據集

前言 想要微調領域大模型,數據的準備是必不可少的。然而微調大模型需要的數據極多,這樣花費很多人力和準備。有沒有方便又高效的方法?一下子就可以準備大量的領域專用數據集呢? 制作領域專用數據集 這里制作的數據集格式為使用的aphaca格式的 1.啟動vllm服務 python -m…

WEB3全棧開發——面試專業技能點P6后端框架 / 微服務設計

一、Express Express是國內大部分公司重點問的。我在本文最后,單獨講解了Express框架。 概念介紹 Express 是基于 Node.js 平臺的極簡、靈活且廣泛使用的 Web 應用框架。它提供了一系列強大的功能,用于構建單頁、多頁及混合型的 Web 應用程序和 API 服…

游戲開發中的CI/CD優化案例:知名游戲公司Gearbox使用TeamCity簡化CI/CD流程

案例背景 關于Gearbox: Gearbox 是一家美國電子游戲公司,總部位于德克薩斯州弗里斯科,靠近達拉斯。Gearbox 成立于1999年,推出過多款史上最具代表性的視頻游戲,包括《半衰期》、《戰火兄弟連》以及《無主之地》。 團隊…

視覺slam--三維剛體運動

線性代數 外積與矩陣乘法的等價性 歐拉角的奇異性--萬向死鎖 現象 第二個軸旋轉度,會導致第三個旋轉軸和惡原始坐標軸的第一個旋轉軸重合,導致第一次旋轉與第三次旋轉都使用了同一個軸進行旋轉,也就是本質上旋轉三次,但是只在兩個…

內窺鏡檢查中基于提示的息肉分割|文獻速遞-深度學習醫療AI最新文獻

Title 題目 Prompt-based polyp segmentation during endoscopy 內窺鏡檢查中基于提示的息肉分割 01 文獻速遞介紹 以下是對這段英文內容的中文翻譯: ### 胃腸道癌癥的發病率呈上升趨勢,且有年輕化傾向(Bray等人,2018&#x…

CppCon 2015 學習:REFLECTION TECHNIQUES IN C++

關于 Reflection(反射) 這個概念,總結一下: Reflection(反射)是什么? 反射是對類型的自我檢查能力(Introspection) 可以查看類的成員變量、成員函數等信息。反射允許枚…

R語言速釋制劑QBD解決方案之一

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一個處方的R語言解決方案。 第一個處方研究評估原料藥粒徑分布、MCC/Lactose比例、崩解劑用量對制劑CQAs的影響。 第二處方研究用于理解顆粒外加硬脂酸鎂和滑石粉對片劑質量和可生產…

“詳規一張圖”——新加坡土地利用數據

在城市規劃和土地管理領域,精確且詳盡的空間數據是進行有效決策的基石。隨著地理信息系統(GIS)技術的發展,我們能夠以前所未有的精度和細節來捕捉、分析和展示土地利用信息。這不僅提升了數據的質量和可靠性,還使得城市…

LabVIEW雙光子成像系統技術

雙光子成像技術的核心特性 雙光子成像通過雙低能量光子協同激發機制,展現出顯著的技術優勢: 深層組織穿透能力:適用于活體組織深度成像 高分辨率觀測性能:滿足微觀結構的精細研究需求 低光毒性特點:減少對樣本的損傷…

MySQL自定義函數零基礎學習教程

1. 引言 想象一下,你在用計算器做數學題。每次計算"圓形面積"時,你都要輸入:3.14 半徑 半徑。如果能把這個計算步驟保存起來,下次只要輸入半徑就自動算出面積,那該多方便! MySQL自定義函數就…

八股---7.JVM

1. JVM組成 1.1 JVM由哪些部分組成?運行流程? 難易程度:☆☆☆ 出現頻率:☆☆☆☆ Java Virtual Machine:Java 虛擬機,Java程序的運行環境(java二進制字節碼的運行環境)好處:一次編寫,到處運行;自動內存管理,垃圾回收機制程序運行之前,需要先通過編譯器將…

企業級AI-DevOps工具鏈的構成及實現方案

企業級AI-DevOps工具鏈的構成及實現方案 DevOps在AI大模型研發中的重要性及應用背景一、場景驅動的AI產品研發運營機制二、AI-DevOps生產線建設三、基于DevOps的AI大模型研發機制四、基于DevOps的智能體場景研發機制五、場景驅動的應用評估分析機制 DevOps在AI大模型研發中的重…

在 Spring Boot 項目里,MYSQL中json類型字段使用

前言&#xff1a; 因為程序特殊需求導致&#xff0c;需要mysql數據庫存儲json類型數據&#xff0c;因此記錄一下使用流程 1.java實體中新增字段 private List<User> users 2.增加mybatis-plus注解 TableField(typeHandler FastjsonTypeHandler.class) private Lis…