最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

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

  • Spring事務(wù)的框架。
  • Spring事務(wù)引入機(jī)制,主要學(xué)習(xí)@EnableTransactionManagement的相關(guān)內(nèi)容。
  • Spring事務(wù)的控制機(jī)制,主要學(xué)習(xí)@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ù)屬性的。

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

另一個(gè)是DefaultTransactionTemplate:

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

事務(wù)傳播機(jī)制,7個(gè)事務(wù)傳播機(jī)制的具體含義,我們?cè)谄渌恼轮幸呀?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;

隔離級(jí)別

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

//數(shù)據(jù)庫(kù)的默認(rèn)隔離級(jí)別
int ISOLATION_DEFAULT = -1;
int ISOLATION_READ_UNCOMMITTED = 1;
int ISOLATION_READ_COMMITTED = 2; 
int ISOLATION_REPEATABLE_READ = 4;
int ISOLATION_SERIALIZABLE = 8;

默認(rèn)超時(shí)

int TIMEOUT_DEFAULT = -1;

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

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

DefaultTransactionAttribute

其中比較重要的一個(gè)方式是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.

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

大概的意思是說:默認(rèn)情況下發(fā)生運(yùn)行時(shí)異常或Error的時(shí)候事務(wù)回滾。而這個(gè)默認(rèn)行為就是通過這個(gè)rollbackOn方法來保證的:

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

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

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

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

相關(guān)文章

  • 基于Spring Boot 的小區(qū)人臉識(shí)別與出入記錄管理系統(tǒng)功能

    基于Spring Boot 的小區(qū)人臉識(shí)別與出入記錄管理系統(tǒng)功能

    文章介紹基于SpringBoot框架與百度AI人臉識(shí)別API的小區(qū)出入管理系統(tǒng),實(shí)現(xiàn)自動(dòng)識(shí)別、記錄及查詢功能,涵蓋技術(shù)選型、數(shù)據(jù)模型設(shè)計(jì)、接口開發(fā)與系統(tǒng)優(yōu)化方案,為智慧社區(qū)提供高效安全管理工具,感興趣的朋友跟隨小編一起看看吧
    2025-08-08
  • Maven項(xiàng)目中resources配置總結(jié)

    Maven項(xiàng)目中resources配置總結(jié)

    這篇文章主要介紹了Maven項(xiàng)目中resources配置總結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-03-03
  • Mybatis-Plus樂觀鎖配置流程

    Mybatis-Plus樂觀鎖配置流程

    這篇文章主要介紹了Mybatis-Plus樂觀鎖配置使用流程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作有一定的參考學(xué)習(xí)價(jià)值,感興趣的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2024-01-01
  • 淺談Java讀寫注冊(cè)表的方式Preferences與jRegistry

    淺談Java讀寫注冊(cè)表的方式Preferences與jRegistry

    這篇文章主要介紹了淺談Java讀寫注冊(cè)表的方式Preferences與jRegistry,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Spring中SpEL表達(dá)式的使用全解

    Spring中SpEL表達(dá)式的使用全解

    SpEL是Spring框架中用于表達(dá)式語言的一種方式,本文主要介紹了Spring中SpEL表達(dá)式的使用全解,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-04-04
  • Java concurrency線程池之線程池原理(一)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    Java concurrency線程池之線程池原理(一)_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了Java concurrency線程池之線程池原理,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Jmeter參數(shù)化實(shí)現(xiàn)原理及過程解析

    Jmeter參數(shù)化實(shí)現(xiàn)原理及過程解析

    這篇文章主要介紹了Jmeter參數(shù)化實(shí)現(xiàn)原理及過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Jasypt的StandardPBEByteEncryptor使用源碼解析

    Jasypt的StandardPBEByteEncryptor使用源碼解析

    這篇文章主要介紹了Jasypt的StandardPBEByteEncryptor使用源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • java自定義Scanner類似功能類的實(shí)例講解

    java自定義Scanner類似功能類的實(shí)例講解

    這篇文章主要介紹了java自定義Scanner類似功能類的實(shí)例講解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • spring整合redisson開啟緩存方式

    spring整合redisson開啟緩存方式

    這篇文章主要介紹了spring整合redisson開啟緩存方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09

最新評(píng)論

庄河市| 普格县| 上犹县| 黎城县| 文登市| 区。| 五家渠市| 巴东县| 抚顺县| 锡林浩特市| 长宁县| 静海县| 松阳县| 光山县| 南丹县| 嘉鱼县| 凭祥市| 威远县| 会泽县| 遵义县| 蓬溪县| 林口县| 东方市| 曲阳县| 舟曲县| 巴中市| 临江市| 阆中市| 阜平县| 都兰县| 雅安市| 崇文区| 咸阳市| 平武县| 屏南县| 大城县| 通山县| 新宾| 凤冈县| 平谷区| 上杭县|