1. 程式人生 > >springboot事務管理詳解

springboot事務管理詳解

之前搭建的Spring boot Mybatis 整合(註解版)中我們簡單的使用了springboot的事務管理,那麼接下來講解一下事務管理的詳細配置

之前的例子中我們使用了預設的事務配置,可以滿足一些基本的事務需求,但是當我們專案較大較複雜時(比如,有多個數據源等),這時候需要在宣告事務時,指定不同的事務管理器。在宣告事務時,只需要通過value屬性指定配置的事務管理器名即可,例如:@Transactional(value="transactionManagerPrimary")

除了指定不同的事務管理器之後,還能對事務進行隔離級別和傳播行為的控制,下面分別詳細解釋:

隔離級別

隔離級別是指若干個併發的事務之間的隔離程度,與我們開發時候主要相關的場景包括:髒讀取、重複讀、幻讀。

我們可以看org.springframework.transaction.annotation.Isolation列舉類中定義了五個表示隔離級別的值:


public enum Isolation {
    DEFAULT(-1),
    READ_UNCOMMITTED(1),
    READ_COMMITTED(2),
    REPEATABLE_READ(4),
    SERIALIZABLE(8);
}
  • DEFAULT:這是預設值,表示使用底層資料庫的預設隔離級別。對大部分資料庫而言,通常這值就是:READ_COMMITTED
  • READ_UNCOMMITTED:該隔離級別表示一個事務可以讀取另一個事務修改但還沒有提交的資料。該級別不能防止髒讀和不可重複讀,因此很少使用該隔離級別。
  • READ_COMMITTED:該隔離級別表示一個事務只能讀取另一個事務已經提交的資料。該級別可以防止髒讀,這也是大多數情況下的推薦值。
  • REPEATABLE_READ:該隔離級別表示一個事務在整個過程中可以多次重複執行某個查詢,並且每次返回的記錄都相同。即使在多次查詢之間有新增的資料滿足該查詢,這些新增的記錄也會被忽略。該級別可以防止髒讀和不可重複讀。
  • SERIALIZABLE:所有的事務依次逐個執行,這樣事務之間就完全不可能產生干擾,也就是說,該級別可以防止髒讀、不可重複讀以及幻讀。但是這將嚴重影響程式的效能。通常情況下也不會用到該級別。

指定方法:通過使用isolation屬性設定,例如:

@Transactional(isolation = Isolation.DEFAULT)

傳播行為

所謂事務的傳播行為是指,如果在開始當前事務之前,一個事務上下文已經存在,此時有若干選項可以指定一個事務性方法的執行行為。

我們可以看org.springframework.transaction.annotation.Propagation列舉類中定義了6個表示傳播行為的列舉值:

public enum Propagation {
    REQUIRED(0),
    SUPPORTS(1),
    MANDATORY(2),
    REQUIRES_NEW(3),
    NOT_SUPPORTED(4),
    NEVER(5),
    NESTED(6);
}
  • REQUIRED:如果當前存在事務,則加入該事務;如果當前沒有事務,則建立一個新的事務。
  • SUPPORTS:如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續執行。
  • MANDATORY:如果當前存在事務,則加入該事務;如果當前沒有事務,則丟擲異常。
  • REQUIRES_NEW:建立一個新的事務,如果當前存在事務,則把當前事務掛起。
  • NOT_SUPPORTED:以非事務方式執行,如果當前存在事務,則把當前事務掛起。
  • NEVER:以非事務方式執行,如果當前存在事務,則丟擲異常。
  • NESTED:如果當前存在事務,則建立一個事務作為當前事務的巢狀事務來執行;如果當前沒有事務,則該取值等價於REQUIRED。

指定方法:通過使用propagation屬性設定,例如:

@Transactional(propagation = Propagation.REQUIRED)

相關推薦

springboot事務管理

之前搭建的Spring boot Mybatis 整合(註解版)中我們簡單的使用了springboot的事務管理,那麼接下來講解一下事務管理的詳細配置 之前的例子中我們使用了預設的事務配置,可以滿足一些基本的事務需求,但是當我們專案較大較複雜時(比如,

Java程式設計師從笨鳥到菜鳥之(八十)細談Spring(九)spring+hibernate宣告式事務管理

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

Spring Boot事務管理

什麼是事務? 我們在開發企業應用時,對於業務人員的一個操作實際是對資料讀寫的多步操作的結合。由於資料操作在順序執行的過程中,任何一步操作都有可能發生異常,異常會導致後續操作無法完成,此時由於業務邏輯並未正確的完成,之前成功操作資料的並不可靠,需要在這種情況下進行回退。 事務的作用就是為了

spring事務管理(和例項)

原文地址: 寫這篇部落格之前我首先讀了《Spring in action》,之後在網上看了一些關於Spring事務管理的文章,感覺都沒有講全,這裡就將書上的和網上關於事務的知識總結一下,參考的文章如下: 1 初步理解 理解事務之前,先講一個你日常生活中最常乾的事:取

Spring 事務管理

事務的概念 我們知道,在JavaEE的開發過程中,service方法用於處理主要的業務邏輯,而業務邏輯的處理往往伴隨著對資料庫的多個操作。以我們生活中常見的轉賬為例,service方法要實現將A賬戶轉賬到B賬戶的功能,則該方法內必定要有兩個操作:先將A賬戶的金額減去要轉賬的數目,然後將B賬戶加上相應的金額數

Spring架構---Spring中的事務管理

Spring中的事務管理詳解 1. 事務簡介: 事務管理是企業級應用程式開發中必不可少的技術,用來確保資料的完整性和一致性 事務就是一系列的動作,它們被當作一個單獨的工作單元。這些動作要麼全部完成,要麼全部不起作用 2. 事務的四個關鍵屬性(ACID) ① 原子性(atomici

springmvc事務管理

spring可以支援程式設計式事務和宣告式事務。 Spring使用事務管理器,每個不同平臺的事務管理器都實現了介面:PlatformTransactionManager 此介面是事務管理的核心,提供了三個需要實現的函式: [java] v

SSH:Spring框架(宣告式事務管理

1) 概念:事務 (Transaction) 是訪問並可能更新資料庫中各種資料項的一個程式執行單元 (unit) 。事務通常由高階資料 庫操縱語言或程式語言 (如 SQL , C++ 或 Java ) 書寫的使用者程式的執行所引起, 並用形如 begin transacti

可能是最漂亮的Spring事務管理

事務概念回顧 什麼是事務? 事務是邏輯上的一組操作,要麼都執行,要麼都不執行. 事物的特性(ACID): 原子性: 事務是最小的執行單位,不允許分割。事務的原子性確保動作要麼全部完成,要麼完全不起作用; 一致性: 執行事

關於事務管理的理解和Spring事務管理

轉載於:http://www.mamicode.com/info-detail-1248286.html1 初步理解理解事務之前,先講一個你日常生活中最常乾的事:取錢。 比如你去ATM機取1000塊錢,大體有兩個步驟:首先輸入密碼金額,銀行卡扣掉1000元錢;然後ATM出10

Spring事務管理

事務的基本原理 Spring事務的本質其實就是資料庫對事務的支援,使用JDBC的事務管理機制,就是利用java.sql.Connection物件完成對事務的提交,那在沒有Spring幫我們管理事務之前,我們要怎麼做。 Connection conn =

可能是最漂亮的 Spring 事務管理

開發十年,就只剩下這套架構體系了! >>>   

SpringBoot jpa事務註解

@Transactional spring 事務註解 1.簡單開啟事務管理 @EnableTransactionManagement // 啟註解事務管理,等同於xml配置方式的 <tx:annotation-driven /> 2.事務註解詳解 預設遇到throw

Springboot mini - Solon(四)- Solon的事務傳播機制

> Springboot min -Solon 詳解系列文章: > [Springboot mini - Solon詳解(一)- 快速入門](https://www.cnblogs.com/noear/p/14115763.html) > [Springboot mini - Solon詳解

09_02_磁盤及文件系統管理之五

09_02_磁盤及文件系統管理詳解之五分區 —> 創建文件系統(格式化)文件系統管理重新創建文件系統會損壞原有文件fdisk /dev/sda在裏面刪不掉,按ctrl+Backspace即可partprobe /dev/sda 只探測這一個mkfs: make file system -t FS

9.3磁盤及文件系統管理

磁盤 文件系統 管理 練習:4 調整其預留百分比為3% #tune2fs -m 3 -L DATA /dev/sda75 以重新掛載此文件系統為不更新訪問時間戳,並驗證其效果#stat /backup/inittab# cat /backup/inittab# stat# mount -o rem

#21 在Linux裏進程管理,與pstree、ps、pgrep、pkill、pidof、top命令的應用

在linux裏進程管理詳解 與pstree、ps、pgrep、pkill、pidof、top命令的應用 進程管理: 所謂進程:process,一個活動的程序的實體的副本; 生命周期; 可能包含一個或多個執行流; 創建進程: 每個進程的組織結構是一致的: 內核在正常啟動並且全

Apache Spark 內存管理

append 緩存 hashmap slave 完整 developer transform borde 區別 Apache Spark 內存管理詳解 Spark 作為一個基於內存的分布式計算引擎,其內存管理模塊在整個系統中扮演著非常重要的角色。理解 Spark 內存

Mysql數據庫分布式事務XA

oar 存儲引擎 成了 from get 分布式事務 value ive 進展 XA事務簡介 XA 事務的基礎是兩階段提交協議。需要有一個事務協調者來保證所有的事務參與者都完成了準備工作(第一階段)。如果協調者收到所有參與者都準備好的消息,就會通知所有的事務都可以提交了(第

軟件包管理

linux包管理詳解一、簡介 我們知道在操作系統上所使用的程序都是由程序員通過開發工具得來,程序員直接編寫的純文本的文檔我們稱之為源代碼,由於計算機識別的是二進制程序,因此在完成源代碼編寫之後,就必須要經過編譯成為操作系統可以看得懂的二進制程序,這裏的編譯就是通過編譯器來進行的操作,編譯器的功能就是將源