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

Spring的兩種事務(wù)管理機(jī)制的基本概念和demo示例

 更新時間:2023年07月17日 10:36:55   作者:小威要向諸佬學(xué)習(xí)呀  
Spring事務(wù)包括聲明式事務(wù)管理和注解式事務(wù)管理,我們通過概念和小demo的形式一步一步地來一起學(xué)習(xí)這個知識點(diǎn),需要的朋友可以參考下

聲明式事務(wù)管理

首先簡單介紹下Spring的聲明式事務(wù)管理:

聲明式事務(wù)管理是指通過配置來實(shí)現(xiàn)事務(wù)管理,我們只需定義事務(wù)邊界和事務(wù)屬性,不需要顯式編寫事務(wù)管理的代碼。

那么我們?nèi)绾螌?shí)現(xiàn)呢?

首先配置事務(wù)管理器和數(shù)據(jù)源:通過配置 <bean> 元素,使用 TransactionManager 類型的 Bean 來提供事務(wù)管理器的實(shí)例,并使用 DataSource 類型的 Bean 來提供數(shù)據(jù)源。

接著定義事務(wù)邊界:使用 <tx:advice> 元素來定義事務(wù)邊界和事務(wù)屬性,指定哪些方法需要進(jìn)行事務(wù)管理。

還需要配置事務(wù)通知:使用 <aop:config> 元素來啟用事務(wù)管理功能并將事務(wù)通知應(yīng)用到指定的切入點(diǎn)上。

注解式管理事務(wù)

除了上面提到的聲明式管理之外,Spring提供了一種更加簡單且強(qiáng)大的方式來管理事務(wù),通過使用注解式事務(wù),可以在方法級別上進(jìn)行聲明和配置事務(wù)的行為。這塊面試官問的更多,我們來詳細(xì)介紹下:

@Transactional注解(核心注解): @Transactional是Spring中最常用的注解之一,用于標(biāo)識需要進(jìn)行事務(wù)管理的方法或類。它可以應(yīng)用在方法上或類上,而且還可以配置這些屬性:

  1. value:指定事務(wù)管理器的名稱(如果有多個事務(wù)管理器)。
  2. propagation:指定事務(wù)傳播行為,默認(rèn)值為REQUIRED。
  3. isolation:指定事務(wù)隔離級別,默認(rèn)值為DEFAULT。
  4. readOnly:指定事務(wù)是否為只讀事務(wù),默認(rèn)值為false。
  5. timeout:指定事務(wù)超時時間,默認(rèn)值為-1,表示不設(shè)置超時。

事務(wù)傳播行為

上面介紹了Spring實(shí)現(xiàn)事務(wù)的兩種方式,接下來介紹下另一個重量級的知識點(diǎn)–》事務(wù)傳播行為。

事務(wù)傳播行為定義了當(dāng)一個事務(wù)方法調(diào)用另一個事務(wù)方法時,如何處理事務(wù)的范圍。Spring提供了多種傳播行為選項(xiàng),包括:

  1. REQUIRED:如果當(dāng)前沒有事務(wù),則創(chuàng)建一個新的事務(wù);如果已存在事務(wù),則加入到當(dāng)前事務(wù)中。
  2. REQUIRES_NEW:每次都會創(chuàng)建一個新的事務(wù),如果已存在事務(wù)則將其掛起。
  3. SUPPORTS:如果當(dāng)前存在事務(wù),則加入到當(dāng)前事務(wù)中;如果沒有事務(wù),則以非事務(wù)方式執(zhí)行。
  4. NOT_SUPPORTED:以非事務(wù)方式執(zhí)行方法,如果當(dāng)前存在事務(wù)則將其掛起。
  5. NEVER:以非事務(wù)方式執(zhí)行方法,如果當(dāng)前存在事務(wù)則拋出異常。
  6. MANDATORY:如果當(dāng)前存在事務(wù),則加入到當(dāng)前事務(wù)中;如果沒有事務(wù),則拋出異常。
  7. NESTED:如果當(dāng)前存在事務(wù),則將該事務(wù)嵌套到當(dāng)前事務(wù)中作為一個保存點(diǎn),可以回滾到該保存點(diǎn)。

事務(wù)隔離級別

接下來介紹下 spring的事務(wù)隔離級別,這一塊也是面試官經(jīng)常問到的一點(diǎn)。它與數(shù)據(jù)庫的事務(wù)隔離級別有著異曲同工之妙。

事務(wù)隔離級別定義了多個事務(wù)同時運(yùn)行時彼此之間的可見性和影響范圍。Spring支持以下事務(wù)隔離級別:

  • DEFAULT:使用數(shù)據(jù)庫默認(rèn)的事務(wù)隔離級別。
  • READ_UNCOMMITTED:最低級別的隔離級別,允許讀取未提交的數(shù)據(jù)。
  • READ_COMMITTED:允許讀取已提交的數(shù)據(jù)。
  • REPEATABLE_READ:對同一數(shù)據(jù)的多次讀取結(jié)果保持一致,避免臟讀和不可重復(fù)讀。
  • SERIALIZABLE:最高級別的隔離級別,確保事務(wù)串行執(zhí)行,避免任何并發(fā)問題。
  • 只讀事務(wù)(readOnly): 如果一個事務(wù)中的方法僅執(zhí)行讀操作而不進(jìn)行寫操作時,可以將事務(wù)標(biāo)記為只讀事務(wù)。這樣做可以提高性能,因?yàn)橹蛔x事務(wù)不需要對數(shù)據(jù)進(jìn)行鎖定。

學(xué)生管理系統(tǒng)demo

如果上面的概念看著有點(diǎn)懵,那么接下來讓我們通過一個學(xué)生管理系統(tǒng)的demo來詳細(xì)介紹 Spring 的聲明式事務(wù)和基于注解的事務(wù)管理。

我從項(xiàng)目中扒出來部分偽代碼,現(xiàn)在我們有一個簡單的學(xué)生管理系統(tǒng),其中包含兩個服務(wù)方法:addStudent() 和 updateStudent()。addStudent() 方法用于添加學(xué)生信息,updateStudent() 方法用于更新學(xué)生信息。

使用聲明式事務(wù)管理demo

前面概念部分提到過,在聲明式事務(wù)管理中,我們可以使用 XML 配置來定義事務(wù)邊界和事務(wù)特性。

首先,我們需要配置事務(wù)管理器和數(shù)據(jù)源。在 Spring 配置文件中,我們可以使用 TransactionManager 元素和 DataSource 元素來配置相應(yīng)的 Bean。

<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <!-- 數(shù)據(jù)源配置 -->
</bean>

接下來,定義事務(wù)邊界,我們可以在服務(wù)類中使用 :

<bean id="studentService" class="com.test.StudentService">
    <!-- 依賴注入 -->
</bean>
<tx:advice id="txAdvice" transaction-manager="transactionManager">
    <tx:attributes>
        <tx:method name="add*" propagation="REQUIRED" />
        <tx:method name="update*" propagation="REQUIRED" />
    </tx:attributes>
</tx:advice>
<aop:config>
    <aop:pointcut id="studentServicePointcut" expression="execution(* com.example.StudentService.*(..))" />
    <aop:advisor advice-ref="txAdvice" pointcut-ref="studentServicePointcut" />
</aop:config>

在上面的代碼中,我們使用了 <tx:advice> 元素來配置事務(wù)邊界。通過 <tx:method> 元素,我們可以指定需要進(jìn)行事務(wù)管理的方法并定義事務(wù)傳播行為。

最后,在 Spring 配置文件中,我們需要啟用事務(wù)管理功能并配置事務(wù)通知。

<tx:annotation-driven transaction-manager="transactionManager" />

我們配置了以上代碼,因此Spring 會自動掃描帶有 @Transactional 注解的方法,并生成事務(wù)通知。

使用注解的事務(wù)管理demo

首先第一步也是配置事務(wù)管理器和數(shù)據(jù)源,這一步與聲明式事務(wù)管理相同,因此不在贅述。

接著定義事務(wù)邊界,這點(diǎn)與聲明式事務(wù)管理相比,基于注解的事務(wù)管理不再需要在 Spring 配置文件中進(jìn)行額外的配置。我們只需在服務(wù)類中使用 @Transactional 注解即可。

@Service
public class StudentService {
    // ...
    @Transactional
    public void addStudent(Student student) {
        // 添加學(xué)生信息,管理系統(tǒng)偽代碼省略
    }
    @Transactional
    public void updateStudent(Student student) {
        // 更新學(xué)生信息,管理系統(tǒng)偽代碼省略
    }
    // ...
}

通過添加 @Transactional 注解到服務(wù)類中的方法上,我們直接就實(shí)現(xiàn)了對 addStudent() 和 updateStudent() 方法的事務(wù)管理。

同時,我們也可以將 @Transactional 注解應(yīng)用到接口定義或抽象類的方法上,以便在子類中繼承和覆蓋時繼續(xù)享受事務(wù)管理功能。

面試這樣答

聲明式事務(wù)管理和基于注解的事務(wù)管理是 Spring 提供的兩種常用事務(wù)管理方式。它們都能夠簡化事務(wù)管理的配置和編寫,并提供了靈活的事務(wù)特性。

在聲明式事務(wù)管理中,我們使用 XML 配置或注解來定義事務(wù)邊界和事務(wù)通知。通過使用 <tx:advice> 元素和 <tx:method> 元素,我們可以指定需要進(jìn)行事務(wù)管理的方法并定義事務(wù)傳播行為。

而基于注解的事務(wù)管理更加簡潔,只需在服務(wù)類的方法上添加 @Transactional 注解即可實(shí)現(xiàn)事務(wù)管理。

無論是哪種方式,Spring 的事務(wù)管理機(jī)制都使得我們能夠輕松實(shí)現(xiàn)數(shù)據(jù)的一致性和完整性。通過合理配置事務(wù)特性,我們可以滿足不同業(yè)務(wù)場景下的事務(wù)需求。

到此這篇關(guān)于Spring的兩種事務(wù)管理機(jī)制的基本概念和demo示例的文章就介紹到這了,更多相關(guān)Spring的兩種事務(wù)管理機(jī)制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring?MVC請求轉(zhuǎn)發(fā)與請求重定向的示例詳解

    Spring?MVC請求轉(zhuǎn)發(fā)與請求重定向的示例詳解

    轉(zhuǎn)發(fā)指服務(wù)器接收請求后,從一個資源跳轉(zhuǎn)到另一個資源中,請求轉(zhuǎn)發(fā)是一次請求,不會改變?yōu)g覽器的請求地址,這篇文章主要介紹了Spring?MVC請求轉(zhuǎn)發(fā)與請求重定向的相關(guān)知識,需要的朋友可以參考下
    2023-09-09
  • JavaWeb文件上傳下載功能深入分析(二)

    JavaWeb文件上傳下載功能深入分析(二)

    這篇文章主要為大家詳細(xì)解析了JavaWeb文件上傳與下載功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-06-06
  • Mybatis-Plus實(shí)現(xiàn)公共字段自動填充的項(xiàng)目實(shí)踐

    Mybatis-Plus實(shí)現(xiàn)公共字段自動填充的項(xiàng)目實(shí)踐

    本文主要介紹了Mybatis-Plus實(shí)現(xiàn)公共字段自動填充的項(xiàng)目實(shí)踐,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-07-07
  • Java用自帶的Image IO給圖片添加水印

    Java用自帶的Image IO給圖片添加水印

    本文主要介紹了如何采用Java自帶的Image IO實(shí)現(xiàn)圖片添加水印的需求,并整合了一些其他功能,感興趣的朋友可以參考下
    2021-06-06
  • Spring Bean三級緩存機(jī)制的技術(shù)指南

    Spring Bean三級緩存機(jī)制的技術(shù)指南

    在 Spring 框架中,Bean 的創(chuàng)建和管理是容器的核心功能之一,了提高性能,Spring 采用了多級緩存機(jī)制來減少不必要的對象創(chuàng)建和配置,本文將詳細(xì)介紹 Spring 中 Bean 三級緩存的實(shí)現(xiàn)原理,并通過代碼示例幫助你理解這個機(jī)制的工作方式,需要的朋友可以參考下
    2025-04-04
  • spring boot配置ssl(多cer格式)超詳細(xì)教程

    spring boot配置ssl(多cer格式)超詳細(xì)教程

    這篇文章主要介紹了spring boot配置ssl(多cer格式)超詳細(xì)教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • Spring Boot配置接口WebMvcConfigurer的實(shí)現(xiàn)

    Spring Boot配置接口WebMvcConfigurer的實(shí)現(xiàn)

    這篇文章主要介紹了SpringBoot配置接口WebMvcConfigurer的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java實(shí)現(xiàn)word文檔轉(zhuǎn)成圖片的示例詳解

    Java實(shí)現(xiàn)word文檔轉(zhuǎn)成圖片的示例詳解

    本文主要為大家詳細(xì)介紹了如何在Java項(xiàng)目中引用aspose-words和poi-tljar包實(shí)現(xiàn)word文檔轉(zhuǎn)成圖片,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-10-10
  • 關(guān)于Java變量的聲明、內(nèi)存分配及初始化詳解

    關(guān)于Java變量的聲明、內(nèi)存分配及初始化詳解

    下面小編就為大家?guī)硪黄P(guān)于Java變量的聲明、內(nèi)存分配及初始化詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-03-03
  • 使用MyBatis返回其它類對象的字段處理

    使用MyBatis返回其它類對象的字段處理

    這篇文章主要介紹了使用MyBatis返回其它類對象的字段處理方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評論