事務管理介紹

為什么要用事務管理

在我們同時操作兩個或更多個數據庫時,可能因為網絡等各方面原因導致中間出現異常。造成像對第一個數據庫的操作成功了,但是對第二個數據庫的操作沒有成功。這樣數據的完整性就被破壞了。

事務:是一組操作的集合,要么同時成功,要么同時失敗

事務控制主要三步操作:開啟事務、提交事務/回滾事務。

-- 開啟事務
start transaction; / begin;-- 1. 保存員工基本信息
insert into emp values (39, 'Tom', '123456', '湯姆', 1, '13300001111', 1, 4000, '1.jpg', '2023-11-01', 1, now(), now());-- 2. 保存員工的工作經歷信息
insert into emp_expr(emp_id, begin, end, company, job) values (39,'2019-01-01', '2020-01-01', '百度', '開發'),                                                                                                       (39,'2020-01-10', '2022-02-01', '阿里', '架構');-- 提交事務(全部成功)
commit;-- 回滾事務(有一個失敗)
rollback;

Spring事務管理-(員工管理)

  1. Transactional注解

注解:@Transactional

作用:就是在當前這個方法執行開始之前來開啟事務,方法執行完畢之后提交事務。如果在這個方法執行的過程當中出現了異常,就會進行事務的回滾操作。

位置:業務層的方法上、類上、接口上

  • 方法上:當前方法交給spring進行事務管理(推薦)

  • 類上:當前類中所有的方法都交由spring進行事務管理

  • 接口上:接口下所有的實現類當中所有的方法都交給spring 進行事務管理

可以在application.yml配置文件中開啟事務管理日志,這樣就可以在控制看到和事務相關的日志信息了

#spring事務管理日志
logging: level: org.springframework.jdbc.support.JdbcTransactionManager: debug
  1. 事務進階

?這里主要介紹@Transactional注解當中的兩個常見的屬性:

  • 異常回滾的屬性:rollbackFor

  • 事務傳播行為:propagation

我們先來學習下rollbackFor屬性。

默認情況下,只有出現RuntimeException(運行時異常)才會回滾事務。如果想要所有的異常都回滾,需要配置robackFor屬性

@Transactional(rollbackFor = Exception.class)
2.Propagation注解
  • 就是當一個事務方法被另一個事務方法調用時,這個事務方法應該如何進行事務控制。

屬性值含義
REQUIRED【默認值】需要事務,有則加入,無則創建新事務
REQUIRES_NEW需要新事務,無論有無,總是創建新事務
SUPPORTS支持事務,有則加入,無則在無事務狀態中運行
NOT_SUPPORTED不支持事務,在無事務狀態下運行,如果當前存在已有事務,則掛起當前事務
MANDATORY必須有事務,否則拋異常
NEVER必須沒事務,否則拋異常

對于這些事務傳播行為,我們只需要關注以下兩個就可以了:

  1. REQUIRED(默認值)

  2. REQUIRES_NEW

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

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

相關文章

Android 之 ViewBinding 實現更安全、高效的視圖綁定

??一、配置說明????作用位置??需在模塊級 build.gradle或 build.gradle.kts文件的 android {}塊內添加:android {buildFeatures {viewBinding true // Kotlin DSL 語法} }android {buildFeatures {viewBinding true // Groovy 語法} }??生成規則??為每…

全球首款Java專用AI開發助手實測:一句話生成完整工程代碼——飛算 JavaAI

🌟 嗨,我是Lethehong!🌟🌍 立志在堅不欲說,成功在久不在速🌍🚀 歡迎關注:👍點贊??留言收藏🚀🍀歡迎使用:小智初學計算機…

Shader開發(七)創建第一個Shader項目

在前面的章節中,我們已經了解了Shader的基本概念和渲染管線的工作原理。現在,是時候動手實踐了!本章將帶您一步步創建第一個Shader項目,開啟真正的Shader開發之旅。 為什么選擇openFrameworks? 與其他文章不同&#x…

IAR軟件中測量函數執行時間

通常在調試代碼中需要直到某個函數或者某段代碼的實際執行時間,在IAR中可以直接借助軟件提供的工具來計算代碼執行時間。 第一種方法 進入仿真調試界面,在需要測量的代碼前面打斷點。工具欄中選擇 ST-LINK — Data Log Summary在 Data Log Summary 窗口中…

Java 字節碼文件(.class)的組成詳解

文章目錄基礎信息常量池字段方法屬性字節碼文件內容說明案例文件基本信息類的基本信息常量池字段信息構造方法實例方法主方法源文件信息字節碼文件由五部分組成,分別是基礎信息、常量池、字段、方法、屬性。案例: public class Main implements Interfa…

C++之vector類的代碼及其邏輯詳解 (下)

1. insert()這個就是在指定位置插入一個元素,首先計算要插入的這個位置和開頭之間的距離,接著判斷那個_finish 有沒有碰到_endofstorage 或者_endofstorage 是不是為0,如果滿足條件,那就進行擴容,然后接著重新計算距離…

【自動化測試】Python Selenium 自動化測試元素定位專業教程

1. 引言:元素定位在 Selenium 中的核心地位 元素定位是 Selenium 自動化測試的基礎,所有用戶交互操作(如點擊、輸入、選擇)都依賴于準確識別頁面元素。Selenium WebDriver 提供了多種定位策略,從簡單的 ID 定位到復雜…

通用代碼自用

多文件上傳public int save(Role role, RequestParam("nfile") MultipartFile nfile, HttpServletRequest request) {System.out.println(nfile.getOriginalFilename());String path request.getSession().getServletContext().getRealPath("/upload");Fi…

生成式AI如何顛覆我們的工作和生活

原問題: ?你覺得生成式AI未來會如何改變普通人的工作和生活?? 做過一個對比國外和國內工業化產品制造的簡單調研,類似一款定制化的臺燈或者語音音響,從零到原型實物, 美國至少需要20萬美刀,國內成本大概…

K8S、Docker安全漏洞靶場

1 介紹 一個脆弱基礎設施自動化構建框架,主要用于快速、自動化搭建從簡單到復雜的脆弱云原生靶機環境。 1.1 項目的緣起 在研究漏洞時,我們經常會發現“環境搭建”這一步驟本身就會占用大量的時間,與之相比,真正測試PoC、ExP的時間可能非常短。由于許多官方鏡像在國內的…

使用Nginx部署前后端分離項目

使用Nginx部署前后端分離項目:用戶中心系統實踐指南 部署前的關鍵準備 在正式部署前,務必確保前后端在生產環境能正常運行: 前端:測試所有API請求路徑和生產環境配置后端:驗證數據庫連接、環境變量和外部服務集成完整流…

當前就業形勢下,軟件測試工程師職業發展與自我提升的必要性

軟件測試行業正處于深刻變革期,2025年的市場已超越400億美元規模,預計2027年將增長7% 。在這個技術驅動、效率至上的時代,測試工程師若想保持競爭力,必須主動擁抱變革,系統性提升技能。通過深入分析行業現狀與人才需求…

java 之 繼承

一、繼承 1.1 、什么是繼承? 繼承就是把所有的類的公共部分(相同的成員)提取出來,放到一個類中繼承需要使用 extends 關鍵字 public class Animal{ public String name; } public class Dog extends Animal{}Dog 是 An…

強化應急通信生命線:遨游三防平板、衛星電話破局極端災害救援

暴雨傾盆,山洪咆哮,城市陷入內澇。今年進入汛期以來,我國廣東、福建、河南、陜西、京津冀等地相繼遭遇暴雨、洪澇、山洪等災害,道路損毀、基站斷網、電力中斷等次生問題為應急響應帶來嚴峻挑戰。如何保障極端場景下的通信暢通&…

【Linux系統】進程間通信:命名管道

1. 匿名管道的限制匿名管道存在以下核心限制:僅限親緣關系進程:只能用于父子進程等有血緣關系的進程間通信(如通過 fork() 創建的子進程)。單向通信:數據只能單向流動(一端寫,另一端讀&#xff…

Python Day24 多線程編程:核心機制、同步方法與實踐案例

一、線程事件對象(threading.Event)threading.Event 用于實現線程間的通信,可讓一個線程通知其他線程終止任務,核心是通過 “事件觸發” 機制協調線程行為。核心方法:創建事件對象:event threading.Event(…

007 前端( JavaScript HTML DOM+Echarts)

一.html dom運用查找html元素的三種方式通過 id 找到 HTML 元素通過標簽名找到 HTML 元素通過類名找到 HTML 元素1.通過 id 找到 HTML 元素<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>msf的網頁</title> <…

實習文檔背誦

實習內容:1.定時任務與數據補全:基于 XXL-JOB 實現分布式定時任務調度&#xff0c;補全近半年歷史操作日志數據&#xff0c;有效解決因網絡異常導致的數據缺失問題。業務場景&#xff1b;集團的4a日志半年內沒有同步&#xff0c;這邊需要把日志數據同步到集團上首先先評估每天的…

分布式CAP定理

CAP 定理在一個分布式系統中&#xff0c;以下三個特性不可能同時完全滿足&#xff0c;最多只能滿足其中兩個&#xff1a;C&#xff08;Consistency&#xff0c;一致性&#xff09;&#xff1a;所有節點在同一時間看到的數據是完全一致的&#xff08;即更新操作成功并返回后&…

PHP-Casbin:現代化 PHP 應用的權限管理引擎

在當今復雜的Web應用中&#xff0c;精細化的權限管理是保障系統安全的關鍵環節。PHP-Casbin 作為Casbin生態的PHP實現&#xff0c;憑借其靈活的模型支持和強大的擴展能力&#xff0c;已成為PHP開發者實現訪問控制的首選工具。 超越傳統權限模型 PHP-Casbin 基于PERM&#xff…