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

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

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

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

1. 事務管理器

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

  • DataSourceTransactionManager:用于管理 JDBC 事務。
  • JpaTransactionManager:用于管理 JPA 事務。
  • HibernateTransactionManager:用于管理 Hibernate 事務。

事務管理器是 Spring 事務管理的核心,它負責處理事務的開始、提交和回滾。

2. 編程式事務管理

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

使用 TransactionTemplate

@Autowired
private TransactionTemplate transactionTemplate;

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

使用 PlatformTransactionManager

@Autowired
private PlatformTransactionManager transactionManager;

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

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

3. 聲明式事務管理

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

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

使用 @Transactional 注解

import org.springframework.transaction.annotation.Transactional;

@Service
public class MyService {

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

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

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

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

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

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

  • rollbackFor:指定哪些異常會導致事務回滾。例如:rollbackFor = RuntimeException.class。

  • noRollbackFor:指定哪些異常不會導致事務回滾。例如:noRollbackFor = IllegalArgumentException.class。

4. 事務傳播和隔離級別

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

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

示例:配置和使用事務

配置 Spring 事務管理

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

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

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

使用 @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è)務邏輯
    }
}

總結

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

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

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

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

相關文章

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

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

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

    java讀取excel表格的方法

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

    springboot3.2整合mybatis-plus詳細代碼示例

    這篇文章主要給大家介紹了關于springboot3.2整合mybatis-plus的相關資料,Spring Boot是一個非常流行的Java Web框架,可以快速地搭建Web應用程序,需要的朋友可以參考下
    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接口的相關資料,幫助大家更好的理解和學習使用spring,感興趣的朋友可以了解下
    2021-03-03
  • 如何使用Spring?Boot設置上傳文件大小限制

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

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

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

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

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

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

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

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

最新評論