久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

springboot事務(wù)管理詳解

 甘甘灰 2018-09-12

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

之前的例子中我們使用了默認(rèn)的事務(wù)配置,可以滿足一些基本的事務(wù)需求,,但是當(dāng)我們項(xiàng)目較大較復(fù)雜時(shí)(比如,,有多個(gè)數(shù)據(jù)源等),這時(shí)候需要在聲明事務(wù)時(shí),,指定不同的事務(wù)管理器,。在聲明事務(wù)時(shí),只需要通過value屬性指定配置的事務(wù)管理器名即可,,例如:@Transactional(value="transactionManagerPrimary"),。

除了指定不同的事務(wù)管理器之后,還能對(duì)事務(wù)進(jìn)行隔離級(jí)別和傳播行為的控制,,下面分別詳細(xì)解釋:

隔離級(jí)別

隔離級(jí)別是指若干個(gè)并發(fā)的事務(wù)之間的隔離程度,,與我們開發(fā)時(shí)候主要相關(guān)的場(chǎng)景包括:臟讀取、重復(fù)讀、幻讀,。

我們可以看org.springframework.transaction.annotation.Isolation枚舉類中定義了五個(gè)表示隔離級(jí)別的值:


public enum Isolation {
    DEFAULT(-1),
    READ_UNCOMMITTED(1),
    READ_COMMITTED(2),
    REPEATABLE_READ(4),
    SERIALIZABLE(8);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • DEFAULT:這是默認(rèn)值,,表示使用底層數(shù)據(jù)庫的默認(rèn)隔離級(jí)別。對(duì)大部分?jǐn)?shù)據(jù)庫而言,,通常這值就是:READ_COMMITTED,。
  • READ_UNCOMMITTED:該隔離級(jí)別表示一個(gè)事務(wù)可以讀取另一個(gè)事務(wù)修改但還沒有提交的數(shù)據(jù)。該級(jí)別不能防止臟讀和不可重復(fù)讀,,因此很少使用該隔離級(jí)別,。
  • READ_COMMITTED:該隔離級(jí)別表示一個(gè)事務(wù)只能讀取另一個(gè)事務(wù)已經(jīng)提交的數(shù)據(jù)。該級(jí)別可以防止臟讀,,這也是大多數(shù)情況下的推薦值,。
  • REPEATABLE_READ:該隔離級(jí)別表示一個(gè)事務(wù)在整個(gè)過程中可以多次重復(fù)執(zhí)行某個(gè)查詢,并且每次返回的記錄都相同,。即使在多次查詢之間有新增的數(shù)據(jù)滿足該查詢,,這些新增的記錄也會(huì)被忽略。該級(jí)別可以防止臟讀和不可重復(fù)讀,。
  • SERIALIZABLE:所有的事務(wù)依次逐個(gè)執(zhí)行,,這樣事務(wù)之間就完全不可能產(chǎn)生干擾,也就是說,,該級(jí)別可以防止臟讀,、不可重復(fù)讀以及幻讀。但是這將嚴(yán)重影響程序的性能,。通常情況下也不會(huì)用到該級(jí)別,。

指定方法:通過使用isolation屬性設(shè)置,例如:

@Transactional(isolation = Isolation.DEFAULT)
  • 1
  • 2

傳播行為

所謂事務(wù)的傳播行為是指,,如果在開始當(dāng)前事務(wù)之前,,一個(gè)事務(wù)上下文已經(jīng)存在,此時(shí)有若干選項(xiàng)可以指定一個(gè)事務(wù)性方法的執(zhí)行行為,。

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

public enum Propagation {
    REQUIRED(0),
    SUPPORTS(1),
    MANDATORY(2),
    REQUIRES_NEW(3),
    NOT_SUPPORTED(4),
    NEVER(5),
    NESTED(6);
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • REQUIRED:如果當(dāng)前存在事務(wù),,則加入該事務(wù);如果當(dāng)前沒有事務(wù),,則創(chuàng)建一個(gè)新的事務(wù),。
  • SUPPORTS:如果當(dāng)前存在事務(wù),則加入該事務(wù),;如果當(dāng)前沒有事務(wù),,則以非事務(wù)的方式繼續(xù)運(yùn)行。
  • MANDATORY:如果當(dāng)前存在事務(wù),,則加入該事務(wù),;如果當(dāng)前沒有事務(wù),,則拋出異常。
  • REQUIRES_NEW:創(chuàng)建一個(gè)新的事務(wù),,如果當(dāng)前存在事務(wù),,則把當(dāng)前事務(wù)掛起。
  • NOT_SUPPORTED:以非事務(wù)方式運(yùn)行,,如果當(dāng)前存在事務(wù),則把當(dāng)前事務(wù)掛起,。
  • NEVER:以非事務(wù)方式運(yùn)行,,如果當(dāng)前存在事務(wù),則拋出異常,。
  • NESTED:如果當(dāng)前存在事務(wù),,則創(chuàng)建一個(gè)事務(wù)作為當(dāng)前事務(wù)的嵌套事務(wù)來運(yùn)行;如果當(dāng)前沒有事務(wù),,則該取值等價(jià)于REQUIRED,。

指定方法:通過使用propagation屬性設(shè)置,例如:

@Transactional(propagation = Propagation.REQUIRED)
  • 1

原文作者:程序員didi
原文鏈接:http://blog./springboottransactional/

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多