中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

spring中事務(wù)傳播行為有哪些

這篇文章給大家分享的是有關(guān)spring中事務(wù)傳播行為有哪些的內(nèi)容。小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

創(chuàng)新互聯(lián)公司始終堅(jiān)持【策劃先行,效果至上】的經(jīng)營(yíng)理念,通過(guò)多達(dá)10年累計(jì)超上千家客戶的網(wǎng)站建設(shè)總結(jié)了一套系統(tǒng)有效的推廣解決方案,現(xiàn)已廣泛運(yùn)用于各行各業(yè)的客戶,其中包括:陽(yáng)光房等企業(yè),備受客戶表?yè)P(yáng)。

事務(wù)傳播行為整理

spring 的七中傳播行為

  • PROPAGATION_REQUIRED

    • 標(biāo)識(shí)當(dāng)前方法必須在事務(wù)中執(zhí)行

  • PROPAGATION_SUPPORTS

    • 如果存在一個(gè)事務(wù),支持當(dāng)前事務(wù)。如果沒有事務(wù),則非事務(wù)的執(zhí)行。

  • PROPAGATION_MANDATORY

    • 如果已經(jīng)存在一個(gè)事務(wù),支持當(dāng)前事務(wù)。如果沒有一個(gè)活動(dòng)的事務(wù),則拋出異常。

  • PROPAGATION_REQUIRES_NEW

    • 使用PROPAGATION_REQUIRES_NEW,需要使用 JtaTransactionManager作為事務(wù)管理器。 它會(huì)開啟一個(gè)新的事務(wù)。如果一個(gè)事務(wù)已經(jīng)存在,則先將這個(gè)存在的事務(wù)掛起。

  • PROPAGATION_NOT_SUPPORTED

    • PROPAGATION_NOT_SUPPORTED 總是非事務(wù)地執(zhí)行,并掛起任何存在的事務(wù)。

  • PROPAGATION_NEVER

    • 總是非事務(wù)地執(zhí)行,如果存在一個(gè)活動(dòng)事務(wù),則拋出異常。

  • PROPAGATION_NESTED

    • 如果一個(gè)活動(dòng)的事務(wù)存在,則運(yùn)行在一個(gè)嵌套的事務(wù)中。 如果沒有活動(dòng)事務(wù), 則按TransactionDefinition.PROPAGATION_REQUIRED 屬性執(zhí)行。

PROPAGATION_REQUIRED

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
 methodB();
// do something
}
 
@Transactional(propagation = Propagation.REQUIRED)
public void methodB() {
    // do something
}

(1)調(diào)用methodB,因?yàn)楫?dāng)前上下文中沒有事務(wù),所以會(huì)新建一個(gè)事務(wù)。

(2)調(diào)用methodA,因?yàn)楫?dāng)前上下文中沒有事務(wù),所以會(huì)新建一個(gè)事務(wù)。但是,當(dāng)執(zhí)行到methodB時(shí),方法B會(huì)被加入到methodA的事務(wù)中。

PROPAGATION_SUPPORTS

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
 methodB();
// do something
}
 
// 事務(wù)屬性為SUPPORTS
@Transactional(propagation = Propagation.SUPPORTS)
public void methodB() {
    // do something
}

(1) 調(diào)用methodB,則以非事務(wù)的方法執(zhí)行。

(2) 調(diào)用methodA,上下文沒有事務(wù),新建一個(gè),而執(zhí)行到methodB時(shí),它自動(dòng)加入到methodA的事務(wù)中。

PROPAGATION_MANDATORY

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
 methodB();
// do something
}
 
// 事務(wù)屬性為MANDATORY
@Transactional(propagation = Propagation.MANDATORY)
public void methodB() {
    // do something

(1) 調(diào)用methodB時(shí),上下文中沒有事務(wù),則會(huì)拋出異常。

(2) 調(diào)用methodA,上下文沒有事務(wù),新建一個(gè),而執(zhí)行到methodB時(shí),它自動(dòng)加入到methodA的事務(wù)中。

PROPAGATION_REQUIRES_NEW

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
    doSomeThingA();
    methodB();
    doSomeThingB();
	// do something else
}
 
 
// 事務(wù)屬性為REQUIRES_NEW
@Transactional(propagation = Propagation.REQUIRES_NEW)
public void methodB() {
    // do something
}

(1) 調(diào)用methodB會(huì)開啟一個(gè)新的事務(wù)。

(2) 調(diào)用methodA時(shí),methodA會(huì)開啟事務(wù),methodB也會(huì)開啟一個(gè)新的事務(wù),但是這兩個(gè)事務(wù)互相獨(dú)立。也就是說(shuō),如果methodA方法在調(diào)用methodB方法后的doSomeThingB方法失敗了,而methodB方法所做的結(jié)果依然被提交。而除了 methodB之外的其它代碼導(dǎo)致的結(jié)果卻被回滾了

PROPAGATION_NOT_SUPPORTED

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
    doSomeThingA();
    methodB();
    doSomeThingB();
	// do something else
}
 
 
// 事務(wù)屬性為PROPAGATION_NOT_SUPPORTED 
@Transactional(propagation = Propagation.PROPAGATION_NOT_SUPPORTED)
public void methodB() {
    // do something
}

(1) 執(zhí)行methodB。無(wú)事務(wù)。

(2) 執(zhí)行methodA。當(dāng)執(zhí)行到方法B時(shí),事務(wù)會(huì)被掛起,以非事務(wù)的方式執(zhí)行methodB,然后事務(wù)恢復(fù)。

也就是methodB中有異常時(shí),B不回滾,A回滾。

PROPAGATION_NEVER

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
 methodB();
// do something
}
 
// 事務(wù)屬性為SUPPORTS
@Transactional(propagation = Propagation.SUPPORTS)
public void methodB() {
    // do something
}

(1) 單獨(dú)執(zhí)行methodB, 非事務(wù)執(zhí)行。

(2) 執(zhí)行 methodA ,當(dāng)執(zhí)行到methodB時(shí),會(huì)拋出異常。

PROPAGATION_NESTED

@Transactional(propagation = Propagation.REQUIRED)
public void methodA() {
    doSomeThingA();
 	methodB();
    doSomeThingB();
	// do something
}
 
// 事務(wù)屬性為NEWSTED
@Transactional(propagation = Propagation.NEWSTED)
public void methodB() {
    // do something
}

(1)單獨(dú)執(zhí)行methodB,則會(huì)開啟一個(gè)事務(wù)。

(2)執(zhí)行methodA,如果methodA的事務(wù)執(zhí)行失敗后,會(huì)回滾內(nèi)部的methodB事務(wù)。但是,methodB事務(wù)執(zhí)行失敗后,并不會(huì)引起外層methodA事務(wù)的回滾。

感謝各位的閱讀!關(guān)于“spring中事務(wù)傳播行為有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

分享文章:spring中事務(wù)傳播行為有哪些
網(wǎng)頁(yè)鏈接:http://www.rwnh.cn/article8/igpdop.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、Google小程序開發(fā)、App開發(fā)云服務(wù)器、網(wǎng)站設(shè)計(jì)公司

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷型網(wǎng)站建設(shè)
青州市| 克什克腾旗| 昌乐县| 泰来县| 定远县| 渑池县| 北海市| 古田县| 宁夏| 华亭县| 芦山县| 炉霍县| 乌鲁木齐市| 宾阳县| 潞城市| 辽阳市| 密云县| 黑龙江省| 绩溪县| 乌拉特前旗| 政和县| 文登市| 宿州市| 山阴县| 五常市| 高唐县| 乳源| 丰原市| 红桥区| 峨眉山市| 巴彦淖尔市| 大竹县| 天气| 舒兰市| 故城县| 辰溪县| 墨玉县| 庆安县| 涟源市| 辛集市| 固原市|