亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring如何實現(xiàn)管理事務(wù)

 更新時間:2024年11月16日 08:49:25   作者:賺夠壹仟萬  
Spring通過編程式事務(wù)和聲明式事務(wù)管理來控制事務(wù)的邊界和行為,聲明式事務(wù)管理通過@Transactional注解實現(xiàn),提供了豐富的配置選項來控制事務(wù)的行為,如傳播行為、隔離級別、超時時間和回滾規(guī)則

spring通過編程式事務(wù)和聲明式事務(wù)管理來控制事務(wù)的邊界和行為。

1. 事務(wù)管理器

Spring 通過事務(wù)管理器(Transaction Manager)來管理事務(wù)。不同的持久化技術(shù)(如 JDBC、JPA、Hibernate)對應(yīng)不同的事務(wù)管理器,例如:

  • DataSourceTransactionManager:用于管理 JDBC 事務(wù)。
  • JpaTransactionManager:用于管理 JPA 事務(wù)。
  • HibernateTransactionManager:用于管理 Hibernate 事務(wù)。

事務(wù)管理器是 Spring 事務(wù)管理的核心,它負(fù)責(zé)處理事務(wù)的開始、提交和回滾。

2. 編程式事務(wù)管理

編程式事務(wù)管理是指在代碼中顯式地管理事務(wù),通常使用 TransactionTemplate 或者底層的 PlatformTransactionManager。

使用 TransactionTemplate

@Autowired
private TransactionTemplate transactionTemplate;

public void someMethod() {
    transactionTemplate.execute(status -> {
        // 執(zhí)行業(yè)務(wù)邏輯
        // status.setRollbackOnly(); // 回滾事務(wù)
        return null;
    });
}

使用 PlatformTransactionManager

@Autowired
private PlatformTransactionManager transactionManager;

public void someMethod() {
    DefaultTransactionDefinition def = new DefaultTransactionDefinition();
    TransactionStatus status = transactionManager.getTransaction(def);

    try {
        // 執(zhí)行業(yè)務(wù)邏輯
        transactionManager.commit(status); // 提交事務(wù)
    } catch (Exception e) {
        transactionManager.rollback(status); // 回滾事務(wù)
    }
}

3. 聲明式事務(wù)管理

聲明式事務(wù)管理是通過 AOP(面向切面編程)和注解來管理事務(wù),通常使用 @Transactional 注解。

這種方式更加簡潔和方便,推薦使用。

使用 @Transactional 注解

import org.springframework.transaction.annotation.Transactional;

@Service
public class MyService {

    @Transactional
    public void someMethod() {
        // 執(zhí)行業(yè)務(wù)邏輯
    }
}

@Transactional 注解可以應(yīng)用于類或方法上,它的主要屬性包括:

  • propagation:事務(wù)的傳播行為,定義事務(wù)如何傳播。常用的傳播行為包括:

    • REQUIRED(默認(rèn)):如果當(dāng)前存在事務(wù),則加入該事務(wù);如果當(dāng)前沒有事務(wù),則創(chuàng)建一個新事務(wù)。
    • REQUIRES_NEW:總是創(chuàng)建一個新事務(wù),如果當(dāng)前存在事務(wù),則掛起當(dāng)前事務(wù)。
    • SUPPORTS:如果當(dāng)前存在事務(wù),則加入該事務(wù);如果當(dāng)前沒有事務(wù),則以非事務(wù)方式執(zhí)行。
    • NOT_SUPPORTED:總是以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則掛起當(dāng)前事務(wù)。
    • MANDATORY:必須在事務(wù)中執(zhí)行,如果當(dāng)前沒有事務(wù),則拋出異常。
    • NEVER:必須在非事務(wù)中執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。
    • NESTED:如果當(dāng)前存在事務(wù),則創(chuàng)建一個嵌套事務(wù);如果當(dāng)前沒有事務(wù),則創(chuàng)建一個新事務(wù)。
  • isolation:事務(wù)的隔離級別,定義一個事務(wù)可以受到其他事務(wù)影響的程度。常用的隔離級別包括:

    • DEFAULT(默認(rèn)):使用底層數(shù)據(jù)庫的默認(rèn)隔離級別。
    • READ_UNCOMMITTED:最低的隔離級別,允許臟讀。
    • READ_COMMITTED:允許不可重復(fù)讀,防止臟讀。
    • REPEATABLE_READ:允許幻讀,防止臟讀和不可重復(fù)讀。
    • SERIALIZABLE:最高的隔離級別,防止臟讀、不可重復(fù)讀和幻讀。
  • timeout:事務(wù)超時時間,以秒為單位。默認(rèn)值是 -1,表示沒有超時限制。

  • readOnly:是否為只讀事務(wù)。默認(rèn)值是 false。只讀事務(wù)通常用于查詢操作,可以對某些數(shù)據(jù)庫優(yōu)化。

  • rollbackFor:指定哪些異常會導(dǎo)致事務(wù)回滾。例如:rollbackFor = RuntimeException.class。

  • noRollbackFor:指定哪些異常不會導(dǎo)致事務(wù)回滾。例如:noRollbackFor = IllegalArgumentException.class。

4. 事務(wù)傳播和隔離級別

事務(wù)傳播和隔離級別是 Spring 事務(wù)管理的重要概念。

  • 事務(wù)傳播(Propagation):定義了事務(wù)方法被調(diào)用時事務(wù)的傳播行為。例如,當(dāng)前方法是否要在一個事務(wù)中運(yùn)行,是否要加入現(xiàn)有的事務(wù),或者是否要開啟一個新的事務(wù)。
  • 隔離級別(Isolation):定義了一個事務(wù)可以看到其他事務(wù)對數(shù)據(jù)的影響程度。常見的隔離級別包括:READ_UNCOMMITTEDREAD_COMMITTED、REPEATABLE_READSERIALIZABLE。

示例:配置和使用事務(wù)

配置 Spring 事務(wù)管理

在 Spring Boot 中,只需要在主類或者配置類中添加 @EnableTransactionManagement 注解:

import org.springframework.context.annotation.Configuration;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
public class AppConfig {
    // 配置數(shù)據(jù)源和事務(wù)管理器等
}

使用 @Transactional 注解

import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

@Service
public class UserService {

    @Transactional
    public void createUser(User user) {
        // 創(chuàng)建用戶的業(yè)務(wù)邏輯
    }
}

總結(jié)

Spring 的事務(wù)管理機(jī)制通過編程式事務(wù)管理和聲明式事務(wù)管理兩種方式提供了靈活的事務(wù)控制。

聲明式事務(wù)管理是最常用的方式,通過 @Transactional 注解,可以方便地控制事務(wù)的傳播行為、隔離級別、超時時間和回滾規(guī)則。

Spring 事務(wù)管理機(jī)制的強(qiáng)大和靈活性,使得開發(fā)者可以輕松地處理復(fù)雜的事務(wù)場景,確保數(shù)據(jù)的一致性和完整性。

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • idea2019版與maven3.6.2版本不兼容的解決方法

    idea2019版與maven3.6.2版本不兼容的解決方法

    這篇文章主要介紹了idea2019版與maven3.6.2版本不兼容的解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • java讀取excel表格的方法

    java讀取excel表格的方法

    這篇文章主要為大家詳細(xì)介紹了java讀取excel表格的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • springboot3.2整合mybatis-plus詳細(xì)代碼示例

    springboot3.2整合mybatis-plus詳細(xì)代碼示例

    這篇文章主要給大家介紹了關(guān)于springboot3.2整合mybatis-plus的相關(guān)資料,Spring Boot是一個非常流行的Java Web框架,可以快速地搭建Web應(yīng)用程序,需要的朋友可以參考下
    2023-12-12
  • 如何在Java中實現(xiàn)一個散列表

    如何在Java中實現(xiàn)一個散列表

    這篇文章主要介紹了如何在Java中實現(xiàn)一個散列表,建一個HashMap,以String類型為Key,Int類型為Value,下文具體的操作過程需要的小伙伴可以參考一下
    2022-04-04
  • Springboot中yml對于list列表配置方式詳解

    Springboot中yml對于list列表配置方式詳解

    這篇文章主要介紹了Springboot中yml對于list列表配置方式詳解,使用@ConfigurationProperties讀取yml配置文件過程中會遇到讀取yml文件中列表,Config里面使用List集合接收,方法比較簡單,需要的朋友可以參考下
    2023-11-11
  • spring BeanProcessor接口詳解

    spring BeanProcessor接口詳解

    這篇文章主要介紹了spring BeanProcessor接口的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用spring,感興趣的朋友可以了解下
    2021-03-03
  • 如何使用Spring?Boot設(shè)置上傳文件大小限制

    如何使用Spring?Boot設(shè)置上傳文件大小限制

    上傳文件是互聯(lián)網(wǎng)中常應(yīng)用的場景之一,最典型的情況就是上傳頭像等,下面這篇文章主要給大家介紹了關(guān)于如何使用Spring?Boot設(shè)置上傳文件大小限制的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Java制作智能拼圖游戲原理及代碼

    Java制作智能拼圖游戲原理及代碼

    本文給大家分享的是使用Java實現(xiàn)智能拼圖游戲的原理,以及實現(xiàn)的源碼,推薦給大家,有需要的小伙伴可以參考下。
    2015-03-03
  • 使用JAVA判斷凸多邊形的示例代碼

    使用JAVA判斷凸多邊形的示例代碼

    本文提供了使用JAVA判斷凸多邊形的示例代碼供大家參考學(xué)習(xí),需要的朋友可以看一下
    2013-11-11
  • JavaMail入門教程之解析郵件(5)

    JavaMail入門教程之解析郵件(5)

    這篇文章主要為大家詳細(xì)介紹了JavaMail入門教程之解析郵件的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12

最新評論