欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Spring事務(wù)框架之TransactionDefinition源碼解析

 更新時間:2023年08月29日 11:52:25   作者:福  
這篇文章主要為大家介紹了Spring事務(wù)框架之TransactionDefinition源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

Spring事務(wù)的底層原理

  • Spring事務(wù)的框架。
  • Spring事務(wù)引入機制,主要學習@EnableTransactionManagement的相關(guān)內(nèi)容。
  • Spring事務(wù)的控制機制,主要學習@Trasactional相關(guān)內(nèi)容。

先從Spring事務(wù)的框架開始。

Spring事務(wù)框架中最重要的內(nèi)容主要包括:

  • 事務(wù)管理器TransactionManager。
  • 事務(wù)定義TransactionDefinition。
  • 事務(wù)狀態(tài)TransactionStatus。

其中事務(wù)管理器是核心,研究事務(wù)管理器需要用到TransactionDefinition和TransactionStatus,所以我們先研究這兩部分。

TransactionDefinition

顧名思義,TransactionDefinition是用來定義事務(wù)屬性的。

有兩個比較重要的實現(xiàn)類,一個是DefaultTransactionAttribute.

另一個是DefaultTransactionTemplate:

下來看一下TransactionDefinition中定義的幾個事務(wù)屬性:

事務(wù)傳播機制,7個事務(wù)傳播機制的具體含義,我們在其他文章中已經(jīng)分析過了:

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;

隔離級別

數(shù)據(jù)庫隔離級別:

//數(shù)據(jù)庫的默認隔離級別
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;

然后,有一個獲取默認事務(wù)定義的方法(用意待考):

static TransactionDefinition withDefaults() {
     return StaticTransactionDefinition.INSTANCE;
 }

DefaultTransactionAttribute

其中比較重要的一個方式是rollbackOn:

public boolean rollbackOn(Throwable ex) {
     return (ex instanceof RuntimeException || ex instanceof Error);
 }

我們先來看看JavaDoc:

The default behavior is as with EJB: rollback on unchecked exception (RuntimeException), assuming an unexpected outcome outside of any business rules. Additionally, we also attempt to rollback on Error which is clearly an unexpected outcome as well. By contrast, a checked exception is considered a business exception and therefore a regular expected outcome of the transactional business method, i.e. a kind of alternative return value which still allows for regular completion of resource operations.
This is largely consistent with TransactionTemplate's default behavior, except that TransactionTemplate also rolls back on undeclared checked exceptions (a corner case). For declarative transactions, we expect checked exceptions to be intentionally declared as business exceptions, leading to a commit by default.

 默認行為與EJB相同:發(fā)生運行時異?;虬l(fā)生Error時回滾。而對于check exception一般會被認為是一個業(yè)務(wù)可以認可或期望的結(jié)果,因此是允許交易完成的。這個默認行為與TransactionTemplate的默認行為是保持一致的。

大概的意思是說:默認情況下發(fā)生運行時異?;駿rror的時候事務(wù)回滾。而這個默認行為就是通過這個rollbackOn方法來保證的:

public boolean rollbackOn(Throwable ex) {
        return (ex instanceof RuntimeException || ex instanceof Error);
    }

Spring事務(wù)控制中的事務(wù)定義的最終落地實現(xiàn)就是這個TransactionAttribute,不過他是通過TransactionAttributeSource持有的,后續(xù)分析Spring事務(wù)啟用機制@EnalbeTransactionManagment的時候會看到。

TransactionDefinition的研究就到這里,下一篇文章研究TransactionStatus。

以上就是Spring事務(wù)框架之TransactionDefinition源碼解析的詳細內(nèi)容,更多關(guān)于Spring事務(wù)TransactionDefinition的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Mybatis基礎(chǔ)概念與高級應用小結(jié)

    Mybatis基礎(chǔ)概念與高級應用小結(jié)

    這篇文章主要介紹了Mybatis基礎(chǔ)回顧與高級應用,本文內(nèi)容有點小長,希望大家耐心閱讀,此文結(jié)合實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-06-06
  • Redisson之分布式鎖原理全面分析

    Redisson之分布式鎖原理全面分析

    這篇文章主要介紹了Redisson分布式鎖原理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 一小時迅速入門Mybatis之增刪查改篇

    一小時迅速入門Mybatis之增刪查改篇

    這篇文章主要介紹了迅速入門Mybatis之增刪查改篇,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • SpringBoot打印啟動時異常堆棧信息詳解

    SpringBoot打印啟動時異常堆棧信息詳解

    在本篇文章里小編給大家整理的是關(guān)于SpringBoot打印啟動時異常堆棧信息,有需要的朋友們可以學習下。
    2019-11-11
  • IDEA報java:?java.lang.OutOfMemoryError:?Java?heap?space錯誤解決辦法

    IDEA報java:?java.lang.OutOfMemoryError:?Java?heap?space錯誤

    這篇文章主要給大家介紹了關(guān)于IDEA報java:?java.lang.OutOfMemoryError:?Java?heap?space錯誤的解決辦法,文中將解決的辦法介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • Java中keytool的使用

    Java中keytool的使用

    Keytool 是一個JAVA環(huán)境下的安全鑰匙與證書的管理工具,Keytool將密鑰(key)和證書(certificates)存在一個稱為keystore 的文件(受密碼保護)中,本文重點給大家介紹keytool的使用,感興趣的朋友一起看看吧
    2022-02-02
  • SpringBoot使用Netty實現(xiàn)遠程調(diào)用的示例

    SpringBoot使用Netty實現(xiàn)遠程調(diào)用的示例

    這篇文章主要介紹了SpringBoot使用Netty實現(xiàn)遠程調(diào)用的示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • java實現(xiàn)簡單計算器

    java實現(xiàn)簡單計算器

    這篇文章主要為大家詳細介紹了java實現(xiàn)簡單計算器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • 淺談JVM 底層解析 i++和 ++i 區(qū)別

    淺談JVM 底層解析 i++和 ++i 區(qū)別

    這篇文章主要介紹了JVM 底層解析 i++和 ++i 區(qū)別,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • Java注解機制之Spring自動裝配實現(xiàn)原理詳解

    Java注解機制之Spring自動裝配實現(xiàn)原理詳解

    這篇文章主要為大家詳細介紹了Java注解機制之Spring自動裝配實現(xiàn)原理,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10

最新評論