最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring中事務(wù)幾個常見的問題解決

 更新時間:2022年08月02日 15:47:20   作者:時光清淺ぴ許你安然  
這篇文章主要介紹了Spring中事務(wù)幾個常見的問題解決,事務(wù)這個概念是數(shù)據(jù)庫層面的,Spring只是基于數(shù)據(jù)庫中的事務(wù)進行擴展,以及提供了一些能讓程序員更新方便操作事務(wù)的方式

前言

首先,事務(wù)這個概念是數(shù)據(jù)庫層面的,Spring只是基于數(shù)據(jù)庫中的事務(wù)進行擴展,以及提供了一些能讓程序員更新方便操作事務(wù)的方式

Spring如何處理事務(wù)

Spring中支持編程式事務(wù)和聲明式事務(wù)管理兩種方式

1、編程式事務(wù),可以使用TransactionTemplate

public class B {
    @Autowired
    private TransactionTemplate template;
    
    public void sout(){
        TransactionCallback<Integer> transactionCallback = new TransactionCallback<Integer>() {
            @Override
            public Integer doInTransaction(TransactionStatus transactionStatus) {
                //jdbcTemplate.update
                //jdbcTemplate.update
                if(執(zhí)行失敗){
                    //回滾事務(wù)
                    transactionStatus.setRollbackOnly();
                    return -1;
                }
                return 1;
            }
        };

        Integer result =  template.execute(transactionCallback);
    }

當加了@Transactional注解后,Spring會基于這個類生成一個代理對象,會將這個代理對象作為bean,當在使用這個代理對象的方法時,如果這個方法上存在@Transactional注解,那么代理邏輯會先把事務(wù)的自動提交設(shè)置為false,然后再去執(zhí)行原本的業(yè)務(wù)邏輯方法,如果執(zhí)行業(yè)務(wù)邏輯方法沒有出現(xiàn)異常,那么代理邏輯中就會將事務(wù)提交,如果執(zhí)行業(yè)務(wù)邏輯方法出現(xiàn)了異常,那么會將事務(wù)進行回滾。

好處:代碼級別的事務(wù)控制,可以自己控制事務(wù)的邏輯,比較靈活
缺點:太麻煩,需要自己實現(xiàn)所有的事務(wù)邏輯

2、聲明式事務(wù)

是Spring在AOP基礎(chǔ)上提供的事務(wù)實現(xiàn)機制。

public class B {
    @Autowired
    private TransactionTemplate template;

    @Transactional
    public void sout(){
  System.out.println("=================A=====================");
    }
}

優(yōu)點:不需要在業(yè)務(wù)代碼中添加事務(wù)管理的代碼,只需要在配置文件中做相關(guān)的事務(wù)規(guī)則聲明規(guī)則就可以了。
缺點:只能只能針對方法級別,無法控制代碼級別。

Spring事務(wù)傳播機制

Propagation:多個事務(wù)方法相互調(diào)用時,事務(wù)是如何在這些方法鍵傳播

方法A是一個事務(wù)方法。方法A在執(zhí)行的過程中調(diào)用了方法B,那么方法B有無事務(wù)以及方法B對事物的要求不同都會對方法A的事務(wù)具體執(zhí)行造成影響,同時方法A的事務(wù)對方法B的事務(wù)執(zhí)行也有影響。這種影響具體是什么就由兩個方法所定義的事務(wù)傳播類型所決定

a調(diào)用b,以下描述,當前均只a,自己均指b

  • REQUIRED(Spring默認的事務(wù)傳播類型):如果當前沒有事務(wù),則自己新建一個事務(wù),如果當前存在事務(wù),則加入這個事務(wù)。
  • SUPPORTS:當前存在事務(wù),則加入當前事務(wù),如果當前沒有事務(wù),就以非事務(wù)方法執(zhí)行
  • MANDATORY:當前存在事務(wù),則加入當前事務(wù),如果當前沒有事務(wù),則拋出異常
  • REQUIRES_NEW:創(chuàng)建一個新事務(wù),如果存在當前事務(wù),則掛起該事務(wù)(互不干擾)
  • NOT_SUPPORTED:以非事務(wù)方法執(zhí)行,如果當前存在事務(wù),則掛起當前事務(wù)。
  • NEVER:不使用事務(wù),如果當前存在事務(wù),則拋出異常
  • NESTED:如果當前存在事務(wù),則嵌套事務(wù)中執(zhí)行,否則REQUIRED操作一樣(開啟一個事務(wù))

和REQUIRES_NEW的區(qū)別:
REQUIRES_NEW是新建一個事務(wù),并且新開啟的事務(wù)與原事務(wù)無關(guān),而NESTED則是當前存在事務(wù)時(我們把當前事務(wù)成為父事務(wù))會開啟一個嵌套事務(wù)(稱之為一個子事務(wù))。在NESTED情況下父事務(wù)回滾時,子事務(wù)也會回滾,而在REQUIRES_NEW情況下,原有事務(wù)回滾,不會影響新開啟的子事務(wù)。

和REQUIRED的區(qū)別:
REQUIRED情況下,調(diào)用方存在事務(wù)時,則被調(diào)用和調(diào)用方法使用同一事務(wù),那么被調(diào)用方出現(xiàn)異常時,由于共用一個事務(wù),所以無論調(diào)用方法是否catch異常,事務(wù)都會回滾(父子事務(wù)一起回滾),而在NESTED情況下,被調(diào)用方發(fā)生異常時,調(diào)用發(fā)可以catch其異常,這樣只有子事務(wù)回滾,父事務(wù)不受影響(父事務(wù)是否需要回滾可以自行決定)

Spring事務(wù)隔離級別

  • ISOLATION:Spring的事務(wù)隔離級別
  • DEFAULT:使用數(shù)據(jù)庫默認的事務(wù)隔離級別
  • READ_UNCOMMITTED:讀未提交,允許事務(wù)在執(zhí)行過程中,讀取其他事務(wù)未提交的數(shù)據(jù)
  • READ_COMMITTED:讀已提交,允許事務(wù)在執(zhí)行過程中,讀取其他事務(wù)已提交的數(shù)據(jù)
  • REPEATABLE_READ:可重復讀,在同一個事務(wù)內(nèi),任意時刻的查詢結(jié)果是一致的
  • SERIALIZABLE:所有事務(wù)依次執(zhí)行

數(shù)據(jù)庫配置的隔離級別是read commited,而spring配置的隔離級別是repeatable read,這個時候隔離級別以哪個為準?
以Spring為準(spring配置的會覆蓋數(shù)據(jù)庫的隔離級別),如果Spring配置的隔離級別數(shù)據(jù)庫不支持,效果取決于數(shù)據(jù)庫

到此這篇關(guān)于Spring中事務(wù)幾個常見的問題解決的文章就介紹到這了,更多相關(guān)Spring事務(wù) 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySQL查詢字段實現(xiàn)字符串分割split功能的示例代碼

    MySQL查詢字段實現(xiàn)字符串分割split功能的示例代碼

    本文主要介紹了MySQL查詢字段實現(xiàn)字符串分割split功能的示例代碼,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • Java實現(xiàn)字符串轉(zhuǎn)換成可執(zhí)行代碼的方法

    Java實現(xiàn)字符串轉(zhuǎn)換成可執(zhí)行代碼的方法

    今天小編就為大家分享一篇Java實現(xiàn)字符串轉(zhuǎn)換成可執(zhí)行代碼的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • spring解決循環(huán)依賴

    spring解決循環(huán)依賴

    這篇文章主要介紹了spring如何解決循環(huán)依賴,幫助大家更好的理解和使用spring框架,感興趣的朋友可以了解下
    2020-09-09
  • 使用springBoot項目配置文件位置調(diào)整到打包外

    使用springBoot項目配置文件位置調(diào)整到打包外

    這篇文章主要介紹了使用springBoot項目配置文件位置調(diào)整到打包外,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-08-08
  • Java集合的總體框架相關(guān)知識總結(jié)

    Java集合的總體框架相關(guān)知識總結(jié)

    今天帶大家學習Java集合框架的相關(guān)知識,文中有非常詳細的圖文介紹,對正在學習Java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • Spring Bean常用依賴注入方式詳解

    Spring Bean常用依賴注入方式詳解

    這篇文章主要介紹了Spring Bean常用三種依賴注入方式詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-07-07
  • 基于java解析JSON的三種方式詳解

    基于java解析JSON的三種方式詳解

    這篇文章主要介紹了基于java解析JSON的三種方式,結(jié)合實例形式詳細分析了json解析的原理與GSON、FastJSON等常用解析操作技巧,需要的朋友可以參考下
    2016-12-12
  • 關(guān)于maven項目中使用BCrypt加密方式

    關(guān)于maven項目中使用BCrypt加密方式

    BCrypt是一種基于Blowfish加密算法的密碼散列函數(shù),用于安全存儲和驗證用戶密碼,它通過引入鹽和工作因子增加計算復雜度,有效防止彩虹表攻擊和破解,BCrypt具備適應(yīng)性工作因子、成本參數(shù)調(diào)整、迭代哈希和密鑰擴展等特點,被廣泛應(yīng)用于Web應(yīng)用程序的安全性設(shè)計中
    2024-10-10
  • Java?中導入excel時使用?trim()?無法去除空格的問題解決方案

    Java?中導入excel時使用?trim()?無法去除空格的問題解決方案

    這篇文章主要介紹了Java中導入excel時使用trim()無法去除空格的解決方法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • Java獲取控制臺輸入的兩種方法小結(jié)

    Java獲取控制臺輸入的兩種方法小結(jié)

    這篇文章主要介紹了Java獲取控制臺輸入的兩種方法小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論

库伦旗| 高要市| 平乐县| 武冈市| 定西市| 望江县| 集安市| 宁武县| 措勤县| 兴隆县| 康定县| 大渡口区| 江华| 正定县| 高淳县| 崇信县| 镇巴县| 图们市| 峨山| 扶余县| 兴安盟| 康平县| 宁都县| 海兴县| 鄂伦春自治旗| 丽江市| 皮山县| 永平县| 靖宇县| 施甸县| 高碑店市| 齐齐哈尔市| 安乡县| 顺昌县| 蓝田县| 疏附县| 新龙县| 察隅县| 阳东县| 容城县| 桐柏县|