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

Spring中事務幾個常見的問題解決

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

前言

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

Spring如何處理事務

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

1、編程式事務,可以使用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í)行失敗){
                    //回滾事務
                    transactionStatus.setRollbackOnly();
                    return -1;
                }
                return 1;
            }
        };

        Integer result =  template.execute(transactionCallback);
    }

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

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

2、聲明式事務

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

public class B {
    @Autowired
    private TransactionTemplate template;

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

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

Spring事務傳播機制

Propagation:多個事務方法相互調用時,事務是如何在這些方法鍵傳播

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

a調用b,以下描述,當前均只a,自己均指b

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

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

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

Spring事務隔離級別

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

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

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

相關文章

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

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

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

    Java實現(xiàn)簡單的分頁功能

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

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

    這篇文章主要給大家介紹了關于feign服務端發(fā)現(xiàn)異??蛻舳颂幚淼姆椒?,文中通過示例代碼介紹的非常詳細,對大家學習或者使用feign具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-07-07
  • Linux服務器如何部署java項目

    Linux服務器如何部署java項目

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

    volatile可見性的一些認識和論證

    volatile的關鍵詞的使用在JVM內存模型中已是老生常談了,這篇文章主要結合自己對可見性的一些認識和一些直觀的例子來談談volatile,感興趣的朋友一起看看吧
    2017-08-08
  • 老生常談java中cookie的使用

    老生常談java中cookie的使用

    下面小編就為大家?guī)硪黄仙U刯ava中cookie的使用。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • 用Java實現(xiàn)連連看小游戲

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

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

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

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

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

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

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

    今天給大家?guī)淼奈恼率荍ava并發(fā)編程的相關知識,文中對java同步容器與并發(fā)容器做了非常詳細的介紹及代碼示例,需要的朋友可以參考下
    2021-09-09

最新評論