事務及SpringBoot中的事務開啟

目錄

1.什么是事務?

2.事務的四大特性?

3.SpringBoot中怎樣開啟事務

? ?1.開啟事務支持?

? ? 2.在需要開啟事務的方法或類上使用@Transactional

? ? ??3.通過配置類來開啟全局事務


1.什么是事務?

事務是指在數據庫管理系統中執行的一系列操作的邏輯單元。事務可以由一個或多個數據庫操作(例如插入、更新、刪除等)組成,這些操作被視為一個不可分割的工作單元。在事務中,要么所有的操作都成功執行,要么所有的操作都不執行,不會出現部分操作成功而部分操作失敗的情況。

事務注解屬性:

  1. 傳播行為(Propagation):指定事務的傳播行為,即定義了事務方法調用之間的關系。常見的傳播行為包括:

    • REQUIRED:如果當前存在事務,則加入該事務;如果不存在事務,則創建一個新事務。
    • REQUIRES_NEW:無論當前是否存在事務,都創建一個新事務,并暫停當前事務(如果存在)。
    • SUPPORTS:如果當前存在事務,則加入該事務;如果不存在事務,則以非事務方式執行。
    • NOT_SUPPORTED:以非事務方式執行,如果當前存在事務,則掛起該事務。
  2. 隔離級別(Isolation Level):指定事務的隔離級別,即定義了事務之間的可見性和并發控制的程度。常見的隔離級別包括:

    • READ_UNCOMMITTED:允許讀取未提交的數據,可能導致臟讀、不可重復讀和幻讀問題。
    • READ_COMMITTED:只能讀取已提交的數據,避免了臟讀問題,但可能導致不可重復讀和幻讀問題。
    • REPEATABLE_READ:在同一個事務中多次讀取數據時,保證數據的一致性,避免了臟讀和不可重復讀問題,但可能導致幻讀問題。
    • SERIALIZABLE:最高級別的隔離級別,完全隔離事務,避免了臟讀、不可重復讀和幻讀問題。
  3. 回滾規則(Rollback Rules):指定事務在遇到特定異常時是否回滾。可以定義多個回滾規則,每個規則可以配置一個或多個異常類型。如果事務拋出了與回滾規則匹配的異常,事務將回滾。

  4. 超時時間(Timeout):指定事務的最大執行時間。如果事務執行時間超過指定的超時時間,事務將被強制回滾。

2.事務的四大特性?

通常被稱為ACID特性

  1. 原子性(Atomicity):事務被視為一個不可分割的操作單元,要么全部執行成功,要么全部不執行。如果任何一部分操作失敗,整個事務將被回滾到最初狀態,所有的修改都會被撤銷。

  2. 一致性(Consistency):事務執行前后,數據庫的狀態必須保持一致。這意味著事務的操作必須滿足數據庫的約束和規則,以確保數據的完整性和有效性。

  3. 隔離性(Isolation):在并發環境下,多個事務可能同時執行。隔離性指的是每個事務的操作應該與其他事務相互隔離,使得每個事務都感覺不到其他事務的存在,避免了并發執行可能導致的數據不一致問題。

  4. 持久性(Durability):一旦事務提交成功,其所做的修改將永久保存在數據庫中,即使在系統發生故障或重啟之后也不會丟失。

事務的特點:?通過使用事務,可以保證數據庫的數據一致性和完整性,同時提供并發控制和故障恢復的機制,確保數據庫系統的可靠性和可用性。

3.SpringBoot中怎樣開啟事務

? ?1.開啟事務支持?

在啟動類中使用@EnableTransactionManagement開啟事務支持

package com.cssl;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.transaction.annotation.EnableTransactionManagement;@SpringBootApplication
@EnableTransactionManagement//開啟事務支持
@MapperScan("com.cssl.mapper")
public class HospitalHouApplication {public static void main(String[] args) {SpringApplication.run (HospitalHouApplication.class, args);}}

? ? 2.在需要開啟事務的方法或類上使用@Transactional

? ? ? ? ? ? ? 事務中的注解屬性:

  1. propagation:指定事務的傳播行為。可以設置為?Propagation.REQUIREDPropagation.REQUIRES_NEWPropagation.SUPPORTSPropagation.NOT_SUPPORTED?等。

  2. isolation:指定事務的隔離級別。可以設置為?Isolation.DEFAULTIsolation.READ_UNCOMMITTEDIsolation.READ_COMMITTEDIsolation.REPEATABLE_READIsolation.SERIALIZABLE?等。

  3. readOnly:指定事務是否為只讀事務。如果設置為?true,則事務只能讀取數據,不能修改數據。這可以用于提高性能。

  4. timeout:指定事務的超時時間,單位為秒。如果事務執行時間超過指定的超時時間,事務將被回滾。

  5. rollbackFor?和?noRollbackFor:指定事務回滾的異常類型。rollbackFor?屬性用于指定需要回滾的異常類型,noRollbackFor?屬性用于指定不需要回滾的異常類型。

  6. rollbackForClassName?和?noRollbackForClassName:與上述屬性類似,但可以通過異常類名的字符串形式指定異常類型。

? ? ??3.通過配置類來開啟全局事務

? ? ? ? 優點:?

  • 集中配置事務管理器
  • 靈活的事務配置選項
  • 多數據源支持
  • 代碼整潔性和可維護性
  • 與其他配置的集成

? ? ? ? 創建一個AopConfig的事務配置類

@Aspect
@Configuration
public class AopConfig {private final static int TX_METHOD_TIME_OUT = 10;private static final String POITCUT_EXPRESSION = "execution(* com.test.sketelon.service.*.*(..))";@Autowiredprivate PlatformTransactionManager platformTransactionManager;@Beanpublic TransactionInterceptor txadvice() {NameMatchTransactionAttributeSource source = new NameMatchTransactionAttributeSource ();Map<String, TransactionAttribute> nameMap = new HashMap<> (16);RuleBasedTransactionAttribute readOnlyRule = new RuleBasedTransactionAttribute ();readOnlyRule.setReadOnly (true);readOnlyRule.setPropagationBehavior (TransactionDefinition.PROPAGATION_REQUIRED);RuleBasedTransactionAttribute requireRule = new RuleBasedTransactionAttribute ();requireRule.setRollbackRules (Collections.singletonList (new RollbackRuleAttribute (Exception.class)));requireRule.setPropagationBehavior (TransactionDefinition.PROPAGATION_REQUIRED);requireRule.setTimeout (TX_METHOD_TIME_OUT);nameMap.put ("add*", requireRule);nameMap.put ("save*", requireRule);nameMap.put ("insert*", requireRule);nameMap.put ("update*", requireRule);nameMap.put ("delete*", requireRule);nameMap.put ("remove*", requireRule);nameMap.put ("batch*", requireRule);nameMap.put ("get*", readOnlyRule);nameMap.put ("query*", readOnlyRule);nameMap.put ("find*", readOnlyRule);nameMap.put ("select*", readOnlyRule);nameMap.put ("count*", readOnlyRule);source.setNameMap (nameMap);return new TransactionInterceptor (platformTransactionManager, source);}@Beanpublic Advisor txAdviceAdvisor() {AspectJExpressionPointcut pointcut = new AspectJExpressionPointcut ();pointcut.setExpression (POITCUT_EXPRESSION);return new DefaultPointcutAdvisor (pointcut, txadvice ());}
}

到這就完成了!!!

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

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

相關文章

基于SpringBoot+vue+elementui在線教育系統詳細設計實現

前言 ??博主介紹:?專注于Java、小程序技術領域和畢業項目實戰??? ???? 精彩專欄 推薦訂閱???? 2024年Java精品實戰案例《100套》 ??文末獲取源碼聯系?? ??文末獲取源碼+數據庫?? 感興趣的可以先收藏起來,還有大家在畢設選題,項目以及論文編寫等相…

外包干了7個月,技術退步明顯.......

先說一下自己的情況&#xff0c;大專生&#xff0c;18年通過校招進入北京某軟件公司&#xff0c;干了接近4年的功能測試&#xff0c;今年年初&#xff0c;感覺自己不能夠在這樣下去了&#xff0c;長時間呆在一個舒適的環境會讓一個人墮落! 而我已經在一個企業干了四年的功能測…

智慧旅游+數字化景區整體解決方案:文件全文83頁,附下載

關鍵詞&#xff1a;智慧景區建設&#xff0c;智慧旅游一體化平臺&#xff0c;數字化景區建設&#xff0c;智慧旅游建設&#xff0c;智慧景區解決方案&#xff0c;智慧文旅解決方案&#xff0c;智慧旅游解決方案 一、景區智慧旅游建設需求與背景分析 1、技術發展背景 隨著信息…

Unity | Shader基礎知識(第十集:shader常用外部資產單詞速成)

目錄 一、外部資產簡介 二、常用的外部資產單詞 三、常用的外部資產單詞和引入內部 四、圖片資產外部調整的具體講解 1.Tiling&#xff0c;中文&#xff1a;鋪地磚 2.Offset&#xff0c;中文&#xff1a;偏移 五、作者的話 一、外部資產簡介 在第六集中&#xff0c;我們…

RabbitMQ的常見工作模式

Work queues 工作隊列模式 模式說明 通過Helloworld工程我們已經能夠構建一個簡單的消息隊列的基本項目&#xff0c;項目中存在幾個角色:生產 者、消費者、隊列&#xff0c;而對于我們真實的開發中 &#xff0c;對于消息的消費者通過是有多個的。 比如在實現用戶注冊功能時&…

【OpenCV】繪制桌面鎖屏時鐘

OpenCV 是一個開源的計算機視覺&#xff08;Computer Vision&#xff09;與機器學習軟件庫&#xff0c;提供了多種圖像處理算法與接口&#xff0c;用于解決計算機視覺相關問題。OpenCV 支持多平臺與多語言&#xff0c;本文主要記錄如何使用 OpenCV-Python 繪制桌面鎖屏時鐘。 目…

一、環境配置

一、下載Ubuntu18.04版本鏡像 我的電腦配置比較低(08年奧運限定版哦)&#xff0c;使用的是虛擬機VMware進行安裝Ubuntu18.04版&#xff0c;跟書上使用的一樣 Ubuntu 18.04鏡像 別下載錯了哈 二、VMware下安裝Ubuntu18.04操作系統 之前寫過相關的博文&#xff0c;詳細配置可…

軟件測試——性能測試

目錄 一、性能測試簡介 二、性能測試指標 三、性能測試的流程 四、Jmeter簡介 五、Jmeter常見測試框架 六、Jmeter錄制腳本 七、腳本增強 八、Jmeter腳本參數化 九、斷言 十、關聯 十一、JDBC請求 十二、分布式測試 十三、性能測試報告 一、性能測試簡介…

API接口技術開發拼多多接口鏈接采集實時銷量、SKU信息、券后價格、優惠券信息API接入步驟及演示示例

要實現拼多多接口鏈接采集實時銷量、SKU信息、券后價格、優惠券信息API接入步驟及演示示例&#xff0c;首先需要了解拼多多開放平臺的相關API接口。以下是一個簡單的Java示例&#xff0c;使用requests庫調用拼多多開放平臺的API接口&#xff1a; 注冊并登錄開放平臺&#xff0c…

【LeetCode】一周中的第幾天+ 一年中的第幾天

2023-12-30 文章目錄 一周中的第幾天方法一&#xff1a;模擬思路步驟 方法二&#xff1a;調用庫函數方法三&#xff1a;調用庫函數 [1154. 一年中的第幾天](https://leetcode.cn/problems/day-of-the-year/)方法一&#xff1a;直接計算思路&#xff1a; 方法二&#xff1a;調用…

react Hook useEffect的基本使用及注解

一、概述 useEffect是React提供的一個Hook&#xff0c;用于在函數組件中執行副作用操作。副作用操作通常包括數據獲取、訂閱事件、手動操作DOM等。useEffect可以讓我們在函數組件中模擬類組件的生命周期方法&#xff08;如componentDidMount、componentDidUpdate、componentWi…

vue3+ts實現圖片預覽功能

首先&#xff0c;需要創建一個Vue組件&#xff0c;用于顯示圖片和預覽圖。 <template><div><img :src"imageSrc" mouseover"showPreview" mouseout"hidePreview" /><div v-if"previewVisible" class"previ…

【計算機考研】學碩還是專碩?

這里面沒有什么更好的選擇&#xff0c;大家都知道專碩錄取人數多&#xff0c;學碩錄取人數上&#xff0c;博弈一直存在 單就考研的難度上來說&#xff0c;專碩的難度確實要比學說低很多的&#xff0c;同樣的專業課的情況下&#xff0c;專碩的考研數學考的是數學二和英語二&…

rk3568 gamc0 控制器寄存器配置不了導致連接不上phy

系統啟動 GMAC 的驅動開機 log 上出現打印&#xff1a;No PHY found 或者 Cannot attach to PHY。查閱rk 官方gmac 配置指導手冊出現改問題的原因可能如下&#xff1a; 但反復檢查硬件和軟件發現都沒問題。看內核啟動日志發現gamc0 在啟動過程中讀取gmac0 的版本id是讀取不到&a…

P2440 木材加工

題目背景 要保護環境 題目描述 木材廠有 &#xfffd;n 根原木&#xff0c;現在想把這些木頭切割成 &#xfffd;k 段長度均為 &#xfffd;l 的小段木頭&#xff08;木頭有可能有剩余&#xff09;。 當然&#xff0c;我們希望得到的小段木頭越長越好&#xff0c;請求出 &a…

表格自定義音頻播放組件

1.在使用的地方調用 <Audiosvue ref"audio" class"audio-box" :audioFile"item.cont"></Audiosvue> 2.引入組件 import Audiosvue from "/components/audio"; 3.組件 <template><div><div style"d…

優化Vue項目中 WebStorm:2023.3 對 CSS 和 HTML 的默認注釋

前言 WebStorm是一種基于JetBrains IntelliJ平臺的集成開發環境&#xff08;IDE&#xff09;&#xff0c;專門用于Web開發。它支持JavaScript、HTML和CSS等語言&#xff0c;并提供了豐富的功能和工具&#xff0c;以提高開發人員的效率。但是&#xff0c;在開發Vue項目中發現&a…

(科目三)計算機操作系統

1、操作系統的基本概念及功能 1.1概念 一、操作系統的概念 操作系統是運行在裸機之上的&#xff0c;控制和管理計算機硬件和軟件資源、合理組織計算機工作流程一級方便用戶操作的程序集合。 操作系統由一套分層次的控制程序組成&#xff0c;是計算機硬件的一級擴充是軟件系…

【爬蟲逆向實戰 逆向滑塊 Python+Node】今天逆向的網站有點嘿嘿,還是僅供學習,別瞎搞

逆向日期&#xff1a;2024.03.01 使用工具&#xff1a;Node.js、Python 加密方法&#xff1a;AES標準算法 文章全程已做去敏處理&#xff01;&#xff01;&#xff01; 【需要做的可聯系我】 AES解密處理&#xff08;直接解密即可&#xff09;&#xff08;crypto-js.js 標準算…

Java底層自學大綱_互聯網安全設計篇

互聯網安全設計專題_自學大綱所屬類別學習主題建議課時&#xff08;h&#xff09; A 互聯網安全架構平臺設計001 如何防御XSS攻擊與防止抓包篡改數據2.5 A 互聯網安全架構平臺設計002 spring security實現動態權限控制2.5 A 互聯網安全架構平臺設計003 spring security整合j…