欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot聲明式事務的簡單運用說明

 更新時間:2020年09月18日 09:25:11   作者:justry_deng  
這篇文章主要介紹了SpringBoot聲明式事務的簡單運用說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

關于事物的基本概念等這里就不介紹了。

Spring聲明式事物的實現(xiàn),有兩種方式;第一種是配置xml,第二種是使用相關注解(這兩種方式可詳見《程序員成長筆記(一)》的相關章節(jié))。SpringBoot中默認配置了第二種方式,所以,SpringBoot直接使用注解即可。下面介紹SpringBoot通過注解開啟事物的使用。

SpringBoot使用事物的步驟:

第一步:在啟動類上開啟事物支持

提示:

@EnableTransactionManagement注解其實在大多數(shù)情況下,不是必須的,因為SpringBoot在

TransactionAutoConfiguration類里為我們自動配置啟用了@EnableTransactionManagement注解。

不過自動啟用該注解有兩個前提條件,分別是:@ConditionalOnBean(PlatformTransactionManager.class)和@ConditionalOnMissingBean(AbstractTransactionManagementConfiguration.class),而一般情況下,這兩個條件都是滿足的,所以一般的,我們在啟動類上寫不寫@EnableTransactionManagement都行。本人這里還是建議寫出來。

第二步:在業(yè)務邏輯層接口的實現(xiàn)類中的相關方法上聲明事物

給出Transactional 注解的常用屬性表:

屬性

說明

propagation

事務的傳播行為,默認值為 REQUIRED。

isolation

事務的隔離度,默認值采用 DEFAULT

timeout

事務的超時時間,默認值為-1,不超時。

如果設置了超時時間(單位秒),那么如果超過該時間限制了但事務還沒有完成,則自動回滾事務。

read-only

指定事務是否為只讀事務,默認值為 false;為了忽略那些不需要事務的方法,比如讀取數(shù)據(jù),可以設置 read-only 為 true。

rollbackFor

用于指定能夠觸發(fā)事務回滾的異常類型,如果有多個異常類型需要指定,各類型之間可以通過逗號分隔。{xxx1.class, xxx2.class,……}

noRollbackFor

拋出 no-rollback-for 指定的異常類型,不回滾事務。{xxx1.class, xxx2.class,……}

……

注意事項:

service實現(xiàn)類(一般不建議在接口上)上添加@Transactional,可以將整個類納入spring事務管理,在每個業(yè)務方法執(zhí)行時都會開啟一個事務,不過這些事務采用相同的管理方式。

Transactional 注解只能應用到 public 可見度的方法上。 如果應用在protected、private或者 package可見度的方法上,也不會報錯,不過事務設置不會起作用。

默認情況下,Transactional 注解的事物所管理的方法中,如果方法拋出運行時異?;騟rror,那么會進行事務回滾;如果方法拋出的是非運行時異常,那么不會回滾。

注:SQL異常屬于檢查異常(有的框架將SQL異常重寫為了運行時異常),但是有時我們寫SQL時,檢查異常并不會提示;而默認情況下,事物對檢查異常不會作出回滾處理。

注:在很多時候,我們除了catch一般的異常或自定義異常外,我們還習慣于catch住Exception異常;然后再拋出Exception異常。但是Exception異常屬于非運行時異常(即:檢查異常),因為默認是運行時異常時事物才進行回滾,那么這種情況下,是不會回滾的。我們可以在@Transacional注解中,通過rollbackFor = {Exception.class} 來解決這個問題。即:設置當Exception異?;駿xception的所有任意子類異常時事物會進行回滾。

注:被catch處理了的異常,不會被事物作為判斷依據(jù);如果異常被catch 了,但是又在catch中拋出了新的異常,那么事物會以這個新的異常作 為是否進行回滾的判斷依據(jù)。

事務的傳播機制(行為):

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

即:在執(zhí)行一個@Transactinal注解標注的方法時,開啟了事務;當該方法還在執(zhí)行中時,另一個人也觸發(fā)了該方法;那么此時怎么算事務呢,這時就可以通過事務的傳播機制來指定處理方式。

在TransactionDefinition定義中包括了如下幾個表示傳播行為的常量:

常量

含義

TransactionDefinition.PROPAGATION_REQUIRED

如果當前存在事務,則加入該事務;如果當前沒有事務,則創(chuàng)建一個新的事務。這是默認值。

TransactionDefinition.PROPAGATION_REQUIRES_NEW

創(chuàng)建一個新的事務,如果當前存在事務,則把當前事務掛起。

TransactionDefinition.PROPAGATION_SUPPORTS

如果當前存在事務,則加入該事務;如果當前沒有事務,則以非事務的方式繼續(xù)運行。

TransactionDefinition.PROPAGATION_NOT_SUPPORTED

以非事務方式運行,如果當前存在事務,則把當前事務掛起。

TransactionDefinition.PROPAGATION_NEVER

以非事務方式運行,如果當前存在事務,則拋出異常。

TransactionDefinition.PROPAGATION_MANDATORY

如果當前存在事務,則加入該事務;如果當前沒有事務,則拋出異常。

TransactionDefinition.PROPAGATION_NESTED

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

事務補充:

同一個事務里面,對某一條數(shù)據(jù)的增刪改、 都會影響到這個事務里面接下來的對這個條數(shù)的增刪改查,如(舉例部分情況):

阿里piapia規(guī)范推薦:

事務場景中,拋出異常被catch后,如果需要回滾,一定要手動回滾事務。

如:使用

代替:

阿里推薦的方式屬于自動提交/手動回滾,那如果我們想要手動提交、手動回滾的話,可參考:

注:不需要@Transactional注解。

以上這篇SpringBoot聲明式事務的簡單運用說明就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關文章

  • Java使用Lambda表達式查找list集合中是否包含某值問題

    Java使用Lambda表達式查找list集合中是否包含某值問題

    Java使用Lambda表達式查找list集合中是否包含某值的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • java日志LoggerFactory.getLogger的用法及說明

    java日志LoggerFactory.getLogger的用法及說明

    這篇文章主要介紹了java日志LoggerFactory.getLogger的用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Java入門教程--帶包的類如何編譯與運行

    Java入門教程--帶包的類如何編譯與運行

    我們一般都是通過IDE(如Eclipse、Intellij Idea,STS等)來開發(fā),調(diào)試java項目。在不借助IDE的情況下,如何編譯、運行Java程序。打包編譯時,會自動創(chuàng)建包目錄,不需要自己新建包名文件夾。
    2022-12-12
  • 關于Java中重定向傳參與取值

    關于Java中重定向傳參與取值

    這篇文章主要介紹了Java中重定向傳參與取值問題,重定向不僅可以重定向到當前應用程序中的其他資源,還可以重定向到同一個站點上的其他應用程序中的資源,甚至是使用絕對URL重定向到其他站點的資源,本文給大家介紹的非常詳細,需要的朋友可以參考下
    2023-05-05
  • Layui前后臺交互數(shù)據(jù)獲取java實例

    Layui前后臺交互數(shù)據(jù)獲取java實例

    下面小編就為大家分享一篇Layui前后臺交互數(shù)據(jù)獲取java實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 在SpringBoot中該如何配置攔截器

    在SpringBoot中該如何配置攔截器

    今天給大家?guī)淼氖顷P于SpringBoot的相關知識,文章圍繞在SpringBoot中該如何配置攔截器展開,文中有非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-06-06
  • 使用Java將一個List運用遞歸轉(zhuǎn)成樹形結構案例

    使用Java將一個List運用遞歸轉(zhuǎn)成樹形結構案例

    這篇文章主要介紹了使用Java將一個List運用遞歸轉(zhuǎn)成樹形結構案例,本文通過詳細的案例來解釋說明了如何去操作,需要的朋友可以參考下
    2021-06-06
  • Java設置JSON字符串參數(shù)編碼的示例詳解

    Java設置JSON字符串參數(shù)編碼的示例詳解

    在Java中創(chuàng)建JSON字符串,我們可以使用多個庫,其中最流行的是Jackson、Gson和org.json,,下面給大家分享Java設置JSON字符串參數(shù)編碼的示例,感興趣的朋友一起看看吧
    2024-06-06
  • springcloud集成zookeeper的方法示例

    springcloud集成zookeeper的方法示例

    這篇文章主要介紹了springcloud集成zookeeper的方法示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • 淺談Spring中如何使用設計模式

    淺談Spring中如何使用設計模式

    這篇文章主要介紹了淺談Spring中如何使用設計模式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-05-05

最新評論