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

Spring中事務(wù)幾個(gè)常見(jiàn)的問(wèn)題解決

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

前言

首先,事務(wù)這個(gè)概念是數(shù)據(jù)庫(kù)層面的,Spring只是基于數(shù)據(jù)庫(kù)中的事務(wù)進(jìn)行擴(kuò)展,以及提供了一些能讓程序員更新方便操作事務(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);
    }

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

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

2、聲明式事務(wù)

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

public class B {
    @Autowired
    private TransactionTemplate template;

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

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

Spring事務(wù)傳播機(jī)制

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

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

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

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

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

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

Spring事務(wù)隔離級(jí)別

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

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

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

相關(guān)文章

  • Java判斷用戶輸入月份的季節(jié)

    Java判斷用戶輸入月份的季節(jié)

    這篇文章主要為大家詳細(xì)介紹了Java判斷用戶輸入月份的季節(jié),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Java實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)功能

    Java實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡(jiǎn)單的分頁(yè)功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • feign服務(wù)端發(fā)現(xiàn)異??蛻舳颂幚淼姆椒ń榻B

    feign服務(wù)端發(fā)現(xiàn)異常客戶端處理的方法介紹

    這篇文章主要給大家介紹了關(guān)于feign服務(wù)端發(fā)現(xiàn)異??蛻舳颂幚淼姆椒ǎ闹型ㄟ^(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用feign具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Linux服務(wù)器如何部署java項(xiàng)目

    Linux服務(wù)器如何部署java項(xiàng)目

    這篇文章主要介紹了Linux服務(wù)器如何部署java項(xiàng)目問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • volatile可見(jiàn)性的一些認(rèn)識(shí)和論證

    volatile可見(jiàn)性的一些認(rèn)識(shí)和論證

    volatile的關(guān)鍵詞的使用在JVM內(nèi)存模型中已是老生常談了,這篇文章主要結(jié)合自己對(duì)可見(jiàn)性的一些認(rèn)識(shí)和一些直觀的例子來(lái)談?wù)剉olatile,感興趣的朋友一起看看吧
    2017-08-08
  • 老生常談java中cookie的使用

    老生常談java中cookie的使用

    下面小編就為大家?guī)?lái)一篇老生常談java中cookie的使用。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-12-12
  • 用Java實(shí)現(xiàn)連連看小游戲

    用Java實(shí)現(xiàn)連連看小游戲

    這篇文章主要為大家詳細(xì)介紹了用Java實(shí)現(xiàn)連連看小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • SpringBoot常用讀取配置文件的3種方法小結(jié)

    SpringBoot常用讀取配置文件的3種方法小結(jié)

    本文主要介紹了SpringBoot常用讀取配置文件的3種方法小結(jié),主要包括@Value讀取配置文件,@ConfigurationProperties 讀取配置文件和讀取配置文件中的List,具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • java Spring 5 新特性函數(shù)式Web框架詳細(xì)介紹

    java Spring 5 新特性函數(shù)式Web框架詳細(xì)介紹

    正如昨天Juergen博客中所提到的,Spring 5.0的第二個(gè)里程碑是引入了一個(gè)新的函數(shù)式web框架。在這篇文章中,我們將給出關(guān)于這個(gè)框架的更多信息,,需要的朋友可以參考下
    2016-12-12
  • JAVA 并發(fā)容器的一些易出錯(cuò)點(diǎn)你知道嗎

    JAVA 并發(fā)容器的一些易出錯(cuò)點(diǎn)你知道嗎

    今天給大家?guī)?lái)的文章是Java并發(fā)編程的相關(guān)知識(shí),文中對(duì)java同步容器與并發(fā)容器做了非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下
    2021-09-09

最新評(píng)論