1. 程式人生 > >Spring事務管理以及對屬性的詳細講解

Spring事務管理以及對屬性的詳細講解

1.Spring事務管理概述
——————————————————
Spring事務管理分為程式設計式事務管理和宣告式事務管理兩種。
程式設計式事務允許使用者在實現程式碼中使用顯式的方式呼叫beginTransaction()開啟事務、commit()提交事務、rollback()回滾事務,從而可以達到精確定義事務的邊界。
宣告式事務管理底層是建立在Spring AOP的基礎上,在方式執行前後進行攔截,並在目標方法開始執行前建立新事務或加入一個已存在事務,最後在目標方法執行完後根據情況提交或者回滾事務。宣告式事務的最大優點就是不需要程式設計,將事務管理從複雜業務邏輯中抽離,只需要在配置檔案中配置並在目標方法上新增@Transactional註解即可實現。
Spring事務屬性定義在TransactionDefinition介面中,Spring4中該介面程式碼實現如下:

public interface TransactionDefinition {
    int PROPAGATION_REQUIRED = 0;
    int PROPAGATION_SUPPORTS = 1;
    int PROPAGATION_MANDATORY = 2;
    int PROPAGATION_REQUIRES_NEW = 3;
    int PROPAGATION_NOT_SUPPORTED = 4;
    int PROPAGATION_NEVER = 5;
    int PROPAGATION_NESTED = 6;
    int ISOLATION_DEFAULT = -1;
    int ISOLATION_READ_UNCOMMITTED = 1;
    int ISOLATION_READ_COMMITTED = 2;
    int ISOLATION_REPEATABLE_READ = 4;
    int ISOLATION_SERIALIZABLE = 8;
    int TIMEOUT_DEFAULT = -1;
    //事務的傳播行為
    int getPropagationBehavior();
    //事務的隔離級別
    int getIsolationLevel();
    //事務超時時間
    int getTimeout();
    //是否只讀
    boolean isReadOnly();
    String getName();
}

————
Spring事務屬性可以就是事務的一些基本配置,描述了事務策略如何應用到方法上面,事務屬性包含以下5個方面:

在這裡插入圖片描述
2.Spring事務的傳播屬性
——————————————
Spring事務傳播屬性有7種:在事務定義介面TransactionDefinition中定義了7個表示傳播行為的常量,分別是

PROPAGATION_REQUIRED;
PROPAGATION_SUPPORTS; 
PROPAGATION_MANDATORY;
PROPAGATION_REQUIRES_NEW;
PROPAGATION_NOT_SUPPORTED; 
PROPAGATION_NEVER;
PROPAGATION_NESTED;

在方法@Transactional註解時使用如下:
@Transactional(propagation=Propagation.REQUIRED) 如果有事務, 那麼加入事務, 沒有的話新建一個(預設情況下)
@Transactional(propagation=Propagation.NOT_SUPPORTED)容器不為這個方法開啟事務@Transactional(propagation=Propagation.REQUIRES_NEW)不管是否存在事務,都建立一個新的事務,原來的掛起,新的執行完畢,繼續執行舊的事務
@Transactional(propagation=Propagation.MANDATORY)必須在一個已有的事務中執行,否則丟擲異常
@Transactional(propagation=Propagation.NEVER) 必須在一個沒有的事務執行,否則丟擲異常(與Propagation.MANDATORY相反)
@Transactional(propagation=Propagation.SUPPORTS)如果其他bean呼叫這個方法,在其他bean中宣告事務,那就用事務.如果其他 bean沒有宣告事務,那就不用事務.
詳細描述如下表所示:
在這裡插入圖片描述
3.Spring事務的隔離級別
————————————————
Spring事務的隔離級別定義了一個事務可能受到其他併發事務影響的程度,在事務定義介面TransactionDefinition 中定義了五個表示隔離級別的常量,分別是

ISOLATION_DEFAULT,
ISOLATION_READ_UNCOMMITTED,
ISOLATION_READ_COMMITTED,
ISOLATION_REPEATABLE_READ, 
ISOLATION_SERIALIZABLE;

各個隔離級別在Spring中註解方式如下:
@Transactional(isolation = Isolation.READ_UNCOMMITTED)讀取未提交資料(會出現髒讀, 不可重複讀) 基本不使用
@Transactional(isolation = Isolation.READ_COMMITTED)讀取已提交資料(會出現不可重複讀和幻讀)
@Transactional(isolation = Isolation.REPEATABLE_READ)可重複讀(會出現幻讀)
@Transactional(isolation = Isolation.SERIALIZABLE)序列化
@Transactional(isolation = Isolation.DEFAULT)預設級別,MYSQL: 預設為REPEATABLE_READ級別 SQLSERVER: 預設為READ_COMMITTED
隔離級別詳細描述如下表
在這裡插入圖片描述
4.Spring事務超時時間
————————————
TransactionDefinition 介面中定義了1個表示超時時間的常量TIMEOUT_DEFAULT ,使用getTimeout()方法可以獲取到超時時間,單位是秒。Spring事務超時時間,是指一個事務所允許執行的最長時間,如果超過該時間限制但事務還沒有完成,則自動回滾事務。
在Spring程式中超時時間設定的註解方式是設定timeout的值表示這個事務,true只讀取資料但不更新資料,false表示可正常讀寫資料
@Transactional(timeout=30) 預設是-1,不超時
超時時間詳細描述如下表
在這裡插入圖片描述
5.Spring事務是否只讀
————————————
事務管理的只讀屬性是指對事務性資源進行只讀操作或者是可讀寫操作。所謂事務性資源就是指那些被事務管理的資源,如資料來源、JMS 資源,以及自定義的事務性資源等。如果確定只對事務性資源進行只讀操作,那麼我們可以將事務標誌為只讀的,以提高事務處理的效能。在TransactionDefinition 中以 boolean 型別來表示該事務是否只讀,使用方法isReadOnly()來判斷事務是否是隻讀的。
事務管理的只讀屬性詳細描述如下
在這裡插入圖片描述
6.Spring事務回滾規則
————————————
通常情況下,如果在事務中丟擲了未檢查異常(繼承自 RuntimeException 的異常),則預設將回滾事務。如果沒有丟擲任何異常,或者丟擲了已檢查異常,則正常提交事務。我們可以根據需要人為控制事務在丟擲某些未檢查異常時仍然提交事務,或者在丟擲某些已檢查異常時回滾事務。
Transactional註解中有4個屬性通過設定系統異常類和自定義異常類來自定義回滾規則。
4個屬性分別是

rollbackFor,
rollbackForClassName,
noRollbackFor,
noRollbackForClassName

@Transactional(rollbackFor=RuntimeException.class)
用於設定需要進行回滾的異常類陣列,當方法中丟擲指定異常陣列中的異常時,則事務回滾。
@Transactional(rollbackForClassName=“RuntimeException”)
用於設定需要進行回滾的異常類名稱陣列,當方法中丟擲指定異常名稱陣列中的異常時,則進行事務回滾
@Transactional(noRollbackFor=RuntimeException.class)
用於設定不需要進行回滾的異常類陣列,當方法中丟擲指定異常陣列中的異常時,不進行事務回滾
@Transactional(noRollbackForClassName=RuntimeException.class)
用於設定不需要進行回滾的異常類名稱陣列,當方法中丟擲指定異常名稱陣列中的異常時,不進行事務回滾
在這裡插入圖片描述
[email protected]註解常用引數
——————————————
在Spring開發中,@Transactional註解的常用引數彙總如下
在這裡插入圖片描述

相關推薦

Spring事務管理以及屬性詳細講解

1.Spring事務管理概述 —————————————————— Spring事務管理分為程式設計式事務管理和宣告式事務管理兩種。 程式設計式事務允許使用者在實現程式碼中使用顯式的方式呼叫beginTransaction()開啟事務、commit()提交事務、

Spring事務管理出現執行期異常進行回滾

使用spring難免要用到spring的事務管理,要用事務管理又會很自然的選擇宣告式的事務管理,在spring的文件中說道,spring宣告式事務管理預設對非檢查型異常和執行時異常進行事務回滾,而對檢查型異常則不進行回滾操作。那麼什麼是檢查型異常什麼又是非檢查型異常呢?最簡

spring事務管理實現原理-原始碼-傳播屬性-工作小結

本部落格分為兩點,一個是spring事務實現原理原始碼解讀(個人能力,初步解讀),二是spring事務的傳播屬性   簡單案例,儲存訂單,修改商品數量 就是這兩個方法,第一個方法中引用了第二個方法,都用@Transactional註解。debug呼叫shoppi

淺談spring事務管理的2種方式:程式設計式事務管理和宣告式事務管理以及@Transactional(rollbackFor=Exception.class)註解用法

事務的概念,以及特性: 百度百科介紹: ->資料庫事務(Database Transaction) ,是指作為單個邏輯工作單元執行的一系列操作,要麼完全地執行,要麼完全地不執行。 事務處理可以確保除非事務性單元內的所有操作都成功完成,否則不會永久更新面向資料的資源。通過

spring事務管理,基於xml配置完成事務回滾;spring中資料庫表中欄位名和pojo中屬性名不一致時候,實現RowMapper介面手動封裝

宣告使用JDK8,spring5.0.7, 測試說明: service 層 宣告介面進行轉賬,從A轉賬B ,然後對AB 進行更新操作,在事務中對find方法開啟 只讀許可權,無法進行更新操作,造成事務回滾進行測試事務; 主要測試方法:* void tra

xml方式實現spring的宣告式事務管理jdbc操作的支援

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"     xmlns:xsi="http://www.w3.org/2001/XMLSchema-

Spring事務管理配置以及異常處理

Spring事務管理配置: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi

spring事務管理 TransactionProxyFactoryBean源碼分析

java 事務管理 J2EE,當然離不開事務,事務又當然少不了Spring聲明式事務。spring聲明式事務,很多碼農門,應該和筆者一樣,停留在使用上,及僅僅了解點原理。如:Spring事務管理原理“代理+AOP”,再深入了解就不太清楚了。一直對聲明式事務實現特別感興趣,今天抽時間,剖析一下下。1.準

Spring事務管理

classpath 依賴 font word .get 執行 pointcut str 攔截 1、導入jar包 spring核心包 commons-logging.jar spring-beans.jar spring-context.jar spring-core.jar

Spring事務管理----------整合學習版

XML idt 類定義 dao mda info spring配置 讀取數據 blue 作者:學無先後 達者為先 Spring提供了一流的事務管理。在Spring中可以支持聲明式事務和編程式事務。 一 spring簡介 1 Spring的事務 事

spring事務管理,xml配置aop事務和註解配置aop事務

mov ref itcast template password nds eth poi ntc xml配置和註解配合共同代碼 AccountService.java public interface AccountService { //轉賬方法

spring 事務管理的簡單配置

ger string oot code nal chan 價格 nts 每次 1:事務的優點   事務管理對平時的業務邏輯的健壯性幫助很大,它保證了一個動作的原子性   本例中主要體現在,購票或者購書中,業務邏輯如下:     1:根據商品的ID查詢該商品的價格,     

(轉)spring事務管理幾種方式

pac jpg gets point aos load man classpath XML 轉自:http://blog.csdn.net/jeamking/article/details/43982435 前段時間對Spring的事務配置做了比較深入的研究,在此之間對

Spring事務管理API

logs 技術 -1 blog 9.png src es2017 http .cn Spring事務管理API

spring事務管理aop

jdbc tran err att get ted cor cep pack 達內12 note unit 09 01 1.spring事務管理 2.spring提供了對事務管理支持 spring采用aop機制完成事務控制 可以實現在不修改原有組件代碼情況下實現事務控制功能

Java Spring-事務管理概述

dot nat 框架 3.0 信息 commit int 效率 cti 2017-11-11 23:05:39 事務(Transaction):是邏輯上一組操作,要麽全都成功,要麽全都失敗。 一、事務的特性 原子性:事務不可分割 一致性:事務執行的前後,數據完整性保持一致

Spring---AOP註解開發&jdbc模板&Spring事務管理

use oca update -m spl pub tex com att 一、AOP註解開發   此處需要回憶一遍AOP的概念。簡單的來說,AOP就是利用動態代理技術,做到不觸動源代碼但卻擴展了功能。那麽就需要一個被擴展的對象和一個“新的功能”,例如說給某類的saveUs

[Spring框架]Spring 事務管理基礎入門總結.

復制 tor junit4 dao img bubuko 說過 應該 pat 前言:在之前的博客中已經說過了數據庫的事務, 不過那裏面更多的是說明事務的一些鎖機制, 今天來說一下Spring管理事務的一些基礎知識. 之前的文章: [數據庫事務與鎖]詳解一: 徹底理解數據庫

Spring事務管理Transaction【轉】

集成 class advice nag batis spring3 ont weblogic tex Spring提供了許多內置事務管理器實現(原文鏈接:https://www.cnblogs.com/qiqiweige/p/5000086.html): DataSo