Spring Boot之事務(wù)管理

一.?什么是事務(wù)?

????????我們?cè)陂_發(fā)企業(yè)應(yīng)用時(shí),對(duì)于業(yè)務(wù)人員的一個(gè)操作實(shí)際是對(duì)數(shù)據(jù)讀寫的多步操作的結(jié)合。由于數(shù)據(jù)操作在順序執(zhí)行的過程中,任何一步操作都有可能發(fā)生異常,異常會(huì)導(dǎo)致后續(xù)操作無(wú)法完成,此時(shí)由于業(yè)務(wù)邏輯并未正確的完成,之前成功操作數(shù)據(jù)的并不可靠,需要在這種情況下進(jìn)行回退。

????????事務(wù)的作用就是為了保證用戶的每一個(gè)操作都是可靠的,事務(wù)中的每一步操作都必須成功執(zhí)行,只要有發(fā)生異常就回退到事務(wù)開始未進(jìn)行操作的狀態(tài)。

????????事務(wù)管理是Spring框架中最為常用的功能之一,我們?cè)谑褂肧pring Boot開發(fā)應(yīng)用時(shí),大部分情況下也都需要使用事務(wù)。

二.?快速入門?

????????在Spring Boot中,當(dāng)我們使用了spring-boot-starter-jdbc或spring-boot-starter-data-jpa依賴的時(shí)候,框 架會(huì)自動(dòng)默認(rèn)分別注入DataSourceTransactionManager或JpaTransactionManager。所以我們不需要任何額外 配置就可以用@Transactional注解進(jìn)行事務(wù)的使用。

三.? 傳播行為

????????事務(wù)的第一個(gè)方面是傳播行為(propagation behavior)。當(dāng)事務(wù)方法被另一個(gè)事務(wù)方法調(diào)用時(shí),必須指定事務(wù)應(yīng)該如何傳播。例如:方法可能繼續(xù)在現(xiàn)有事務(wù)中運(yùn)行,也可能開啟一個(gè)新事務(wù),并在自己的事務(wù)中運(yùn)行。Spring定義了七種傳播行為:

3.1? PROPAGATION_REQUIRED?(required ,?必須? ?默認(rèn)值)

? ? ? ? A如果有事務(wù),B將使用該事務(wù);

????????如果A沒有事務(wù),B將創(chuàng)建一個(gè)新的事務(wù)。

3.2? PROPAGATION_SUPPORTS(supports?,支持)

????????A如果有事務(wù),B將使用該事務(wù);

????????如果A沒有事務(wù),B將以非事務(wù)執(zhí)行。

3.3? PROPAGATION_MANDATORY(mandatory?,強(qiáng)制)

????????A如果有事務(wù),B將使用該事務(wù);

????????如果A沒有事務(wù),B將拋異常。

3.4??PROPAGATION_REQUIRES_NEW (requires_new,必須新的)

????????如果A有事務(wù),將A的事務(wù)掛起,B創(chuàng)建一個(gè)新的事務(wù);????

????????如果A沒有事務(wù),B創(chuàng)建一個(gè)新的事務(wù)。

3.5? PROPAGATION_NOT_SUPPORTED (not_supported?,不支持)

????????如果A有事務(wù),將A的事務(wù)掛起,B將以非事務(wù)執(zhí)行;

????????如果A沒有事務(wù),B將以非事務(wù)執(zhí)行。

3.6? PROPAGATION_NEVER (never,從不)

????????如果A有事務(wù),B將拋異常;

????????如果A沒有事務(wù),B將以非事務(wù)執(zhí)行。

3.7??PROPAGATION_NESTED?(nested?,嵌套)

????????A和B底層采用保存點(diǎn)機(jī)制,形成嵌套事務(wù)。

? ? ? ?外層事務(wù)的回滾可以引起內(nèi)層事務(wù)的回滾。而內(nèi)層事務(wù)的異常并不會(huì)導(dǎo)致外層事務(wù)的回滾,它是一個(gè)真正的嵌套事務(wù)。

四. 隔離級(jí)別

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 9,051評(píng)論 0 13
  • 不足的地方請(qǐng)大家多多指正,如有其它沒有想到的常問面試題請(qǐng)大家多多評(píng)論,一起成長(zhǎng),感謝!~ String可以被繼承嗎...
    啟示錄是真的閱讀 2,977評(píng)論 3 3
  • 原文鏈接:https://docs.spring.io/spring-boot/docs/1.4.x/refere...
    pseudo_niaonao閱讀 4,741評(píng)論 0 9
  • 事務(wù)的嵌套概念 所謂事務(wù)的嵌套就是兩個(gè)事務(wù)方法之間相互調(diào)用。spring事務(wù)開啟 ,或者是基于接口的或者是基于類的...
    jackcooper閱讀 1,441評(píng)論 0 10
  • Spring事務(wù)機(jī)制主要包括聲明式事務(wù)和編程式事務(wù),此處側(cè)重講解聲明式事務(wù),編程式事務(wù)在實(shí)際開發(fā)中得不到廣泛使用,...
    EnigmaXXX閱讀 675評(píng)論 0 0