日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

Spring事務的傳播機制

作者:crazy_xieyi 更新時間: 2023-07-10 編程語言

事務傳播機制是什么?(定義)

Spring 事務傳播機制定義了多個包含了事務的?法,相互調?時,事務是如何在這些?法間進?傳遞的。總之,事務傳播機制就是多個事務在相互調用時,事務是如何進行傳遞的。

為什么需要事務傳播機制?

事務隔離級別是保證多個并發(fā)事務執(zhí)?的可控性的(穩(wěn)定性的),?事務傳播機制是保證?個事務在多個調??法間的可控性的(穩(wěn)定性的)。

并發(fā)事務:多個事務同時調??個數(shù)據(jù)庫的問題

事務傳播機制:事務傳播機制解決的是?個事務在多個?法中傳遞的問題?

事務傳播機制有哪些?

Spring 事務傳播機制包含以下 7 種:

Propagation.REQUIRED:默認的事務傳播級別,它表示如果當前存在事務,則加?該事務;如果當前沒有事務,則創(chuàng)建?個新的事務。

Propagation.SUPPORTS:如果當前存在事務,則加?該事務;如果當前沒有事務,則以?事務的?式繼續(xù)運?。

Propagation.MANDATORY:(mandatory為強制性的)如果當前存在事務,則加?該事務;如果當前沒有事務,則拋出異常。

Propagation.REQUIRES_NEW:表示創(chuàng)建?個新的事務,如果當前存在事務,則把當前事務掛起。也就是說不管外部?法是否開啟事務,Propagation.REQUIRES_NEW 修飾的內部?法會新開啟??的事務,且開啟的事務相互獨?,互不?擾。

Propagation.NOT_SUPPORTED:以?事務?式運?,如果當前存在事務,則把當前事務掛起。

Propagation.NEVER:以?事務?式運?,如果當前存在事務,則拋出異常。

Propagation.NESTED:如果當前存在事務,則創(chuàng)建?個事務作為當前事務的嵌套事務來運?;如果當前沒有事務,則該取值等價于 PROPAGATION_REQUIRED。

根據(jù)是否?持當前事務分為以下3類:

Spring事務的傳播機制使用示例:(演示加入事務REQUIRED和嵌套事務NESTED

加入事務REQUIRED示例:

controller代碼如下:

?

UserService代碼如下:?

?

LogInfoService代碼如下:

?執(zhí)行結果如下:?

??此時會發(fā)現(xiàn)用戶表和日志表都已經(jīng)添加成功了,這是在沒有異常的情況下。再次清除數(shù)據(jù),我們手動在LogInfoService代碼中構造一個算術異常,其他代碼不變,再次運行,再來看數(shù)據(jù)表的變化:?

?

在數(shù)據(jù)庫中可以發(fā)現(xiàn)用戶表和日志表都沒有添加成功。

小結:

加入當前事務:@Transactional(propagation = Propagation.REQUTRED)

方法調用流程: controller/add1?-〉用戶添加方法->日志添加方法

當日志添加方法出現(xiàn)異常之后,加入事務的執(zhí)行結果是:

1、用戶添加成功的數(shù)據(jù)也回滾了

2. 日志添加成功的數(shù)據(jù)也回滾了

嵌套事務NESTED示例:

此示例與上面代碼基本一樣,只是傳播機制設置不一樣:

?

?在無異常情況下,數(shù)據(jù)均可以添加成功,執(zhí)行結果如下:

?再次清除數(shù)據(jù),我們手動在LogInfoService代碼中構造一個算術異常,其他代碼不變,再次運行,再來看數(shù)據(jù)表的變化:

執(zhí)行結果如下:

?

小結:

嵌套事務:@Transactional(propagation = Propagation.NESTED)

方法調用流程: controller/add1?-〉用戶添加方法->日志添加方法

當日志添加方法出現(xiàn)異常之后,嵌套事務的執(zhí)行結果是:

1、用戶數(shù)據(jù)添加成功了

2. 日志添加成功的數(shù)據(jù)回滾了

嵌套事務(NESTED)和加?事務(REQUIRED )的區(qū)別:?

整個事務如果全部執(zhí)?成功,?者的結果是?樣的。如果事務執(zhí)?到?半失敗了,那么加?事務整個事務會全部回滾;?嵌套事務會局部回滾,不會影響上?個?法中執(zhí)?的結果。

總結:

1. 在 Spring 項?中使?事務,?兩種?法,?動操作和聲明式?動提交,其中后者使?的最多,在?法上添加 @Transactional 就可以實現(xiàn)了。

2. 設置事務的隔離級別 @Transactional(isolation = Isolation.SERIALIZABLE),Spring 中的事務隔離級別有 5 種。

3. 設置事務的傳播機制 @Transactional(propagation = Propagation.REQUIRED),Spring 中的事務傳播級別有 7 種。

原文鏈接:https://blog.csdn.net/crazy_xieyi/article/details/130697747

  • 上一篇:沒有了
  • 下一篇:沒有了
欄目分類
最近更新