国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot原理分析(四):聲明式事務(wù)

這篇具有很好參考價值的文章主要介紹了Spring Boot原理分析(四):聲明式事務(wù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報違法"按鈕提交疑問。

一、Spring事務(wù)管理方式及其實(shí)現(xiàn)

Spring 提供了多種管理事務(wù)的方式,包括編程式事務(wù)管理和聲明式事務(wù)管理兩種方式。下面分別介紹這兩種方式及其實(shí)現(xiàn)方式:

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

編程式事務(wù)管理是通過編寫代碼來手動管理事務(wù)。它需要在事務(wù)的開始和結(jié)束時,通過編程方式來控制事務(wù)的提交和回滾。Spring 提供了 PlatformTransactionManager 接口來實(shí)現(xiàn)編程式事務(wù)管理。通過該接口,我們可以手動管理事務(wù)的開始、提交和回滾等操作。

以下是一個簡單的編程式事務(wù)管理的示例代碼:

@Autowired
private PlatformTransactionManager transactionManager;

public void transferMoney(Account fromAccount, Account toAccount, BigDecimal amount) {
    TransactionStatus status = transactionManager.getTransaction(new DefaultTransactionDefinition());
    try {
        fromAccount.withdraw(amount);
        toAccount.deposit(amount);
        transactionManager.commit(status);
    } catch (Exception e) {
        transactionManager.rollback(status);
        throw e;
    }
}

在上述示例中,我們使用 PlatformTransactionManager 接口實(shí)現(xiàn)了編程式事務(wù)管理。在 transferMoney() 方法中,我們手動管理了事務(wù)的開始、提交和回滾等操作。

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

Spring 提供了多種聲明式事務(wù)管理的方式,包括基于 XML 配置文件、基于注解和基于 Java 配置類等方式。

Spring 基于注解的聲明式事務(wù)實(shí)現(xiàn),可以通過在方法上添加事務(wù)注解來指定事務(wù)的屬性和行為。Spring 提供了多個事務(wù)注解,包括 @Transactional、@Rollback、@Commit 等。其中,@Transactional 注解是最常用的事務(wù)注解,用于標(biāo)識需要進(jìn)行事務(wù)管理的方法。

以下是一個基于注解的聲明式事務(wù)實(shí)現(xiàn)的示例代碼:

    @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class)
    public void transferMoney(Account fromAccount, Account toAccount, BigDecimal amount) {
        fromAccount.withdraw(amount);
        toAccount.deposit(amount);
        accountDao.update(fromAccount);
        accountDao.update(toAccount);
    }

基于注解的聲明式事務(wù)實(shí)現(xiàn)可以更加方便地管理事務(wù),避免了手動管理事務(wù)的繁瑣和出錯的可能性。同時,它也提高了代碼的可讀性和可維護(hù)性。

總之,Spring 提供了多種管理事務(wù)的方式,包括編程式事務(wù)管理和聲明式事務(wù)管理兩種方式。編程式事務(wù)管理需要手動管理事務(wù)的開始、提交和回滾等操作,而聲明式事務(wù)管理則是通過在配置文件中聲明事務(wù)規(guī)則,來自動管理事務(wù)。通過選擇適合自己的方式,可以更加方便地實(shí)現(xiàn)事務(wù)管理。

二、@Transactional詳解

@Transactional 是 Spring Framework 中最常用的事務(wù)注解之一,它可以用來標(biāo)識需要進(jìn)行事務(wù)管理的方法或類。@Transactional 注解可以指定事務(wù)的傳播行為、隔離級別、超時時間、只讀屬性、回滾規(guī)則等屬性。以下是對 @Transactional 注解的詳細(xì)解析:

 @Transactional(propagation = Propagation.REQUIRED, isolation = Isolation.DEFAULT, rollbackFor = Exception.class)

1. 屬性:事務(wù)傳播行為(Propagation)

Spring 中的事務(wù)傳播行為(Propagation)指的是多個事務(wù)之間的相互影響關(guān)系,即在一個事務(wù)方法調(diào)用另一個事務(wù)方法時,這兩個事務(wù)方法之間的關(guān)系。

Spring Framework 中定義了 7 種事務(wù)傳播行為,分別為:

  • Propagation.REQUIRED:默認(rèn)值,如果當(dāng)前存在事務(wù),則加入該事務(wù),否則創(chuàng)建一個新事務(wù)。
  • Propagation.SUPPORTS:如果當(dāng)前存在事務(wù),則加入該事務(wù),否則以非事務(wù)方式執(zhí)行。
  • Propagation.MANDATORY:如果當(dāng)前存在事務(wù),則加入該事務(wù),否則拋出異常。
  • Propagation.REQUIRES_NEW:創(chuàng)建一個新事務(wù),并掛起當(dāng)前事務(wù)(如果存在)。
  • Propagation.NOT_SUPPORTED:以非事務(wù)方式執(zhí)行,并掛起當(dāng)前事務(wù)(如果存在)。
  • Propagation.NEVER:以非事務(wù)方式執(zhí)行,如果當(dāng)前存在事務(wù),則拋出異常。
  • Propagation.NESTED:如果當(dāng)前存在事務(wù),則在嵌套事務(wù)中執(zhí)行,否則創(chuàng)建一個新事務(wù)。

2. 屬性:事務(wù)隔離級別(Isolation)

事務(wù)隔離級別指的是多個事務(wù)之間的數(shù)據(jù)隔離程度。Spring Framework 中定義了 5 種事務(wù)隔離級別,分別為:

  • Isolation.DEFAULT:使用數(shù)據(jù)庫的默認(rèn)隔離級別。
  • Isolation.READ_UNCOMMITTED:最低的隔離級別,允許讀取未提交的數(shù)據(jù)。
  • Isolation.READ_COMMITTED:允許讀取已提交的數(shù)據(jù)。
  • Isolation.REPEATABLE_READ:保證在同一事務(wù)中多次讀取同一數(shù)據(jù)時,得到的結(jié)果是一致的。
  • Isolation.SERIALIZABLE:最高的隔離級別,完全禁止不可重復(fù)讀和幻讀。

3. 屬性:事務(wù)超時時間(timeout)

事務(wù)超時時間指的是事務(wù)執(zhí)行所允許的最大時間。如果事務(wù)執(zhí)行時間超過了指定的超時時間,則事務(wù)會被回滾。超時時間的單位為秒,默認(rèn)值為 -1,表示永不超時。

4. 屬性:只讀屬性(readOnly)

只讀屬性指的是事務(wù)是否只讀。如果將事務(wù)設(shè)置為只讀,那么在事務(wù)執(zhí)行期間,所有對數(shù)據(jù)庫的修改操作都會被禁止。只讀屬性可以提高事務(wù)的并發(fā)性能。

5. 屬性:回滾規(guī)則(rollbackFor、noRollbackFor、rollbackForClassName、noRollbackForClassName)

回滾規(guī)則指的是哪些異常會導(dǎo)致事務(wù)回滾??梢允褂?rollbackFornoRollbackFor、rollbackForClassName、noRollbackForClassName 等屬性來指定回滾規(guī)則。其中,rollbackFornoRollbackFor 屬性用于指定需要回滾或不需要回滾的異常類型,而 rollbackForClassNamenoRollbackForClassName 屬性用于指定需要回滾或不需要回滾的異常類名。

以上是 @Transactional 注解的常用屬性和含義。需要注意的是,在使用 @Transactional 注解時,必須要將它所在的類或接口注冊為 Spring Bean,且 @Transactional 注解只對 public 方法生效。文章來源地址http://www.zghlxwxcb.cn/news/detail-583012.html

到了這里,關(guān)于Spring Boot原理分析(四):聲明式事務(wù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Spring Boot原理分析 | SpringApplication、Yaml、Properties

    Spring Boot原理分析 | SpringApplication、Yaml、Properties

    ??wei_shuo的個人主頁 ??wei_shuo的學(xué)習(xí)社區(qū) ??Hello World ! Spring開源框架,輕量級的Java開發(fā)框架,解決企業(yè)級應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建,簡化開發(fā) 基于POJO的輕量級和最小侵入型編程 通過IOC,依賴注入(DI)和面向接口實(shí)現(xiàn)松耦合 基于切面(AOP)和慣例進(jìn)行聲明式編程 通過切

    2024年02月12日
    瀏覽(38)
  • 《Spring Boot源碼解讀與原理分析》書籍推薦

    《Spring Boot源碼解讀與原理分析》書籍推薦

    Spring Boot 1.0.0 早在2014年就已經(jīng)發(fā)布,只不過到了提倡“降本增效”的今天,Spring Boot才引起了越來越多企業(yè)的關(guān)注。Spring Boot是目前Java EE開發(fā)中頗受歡迎的框架之一。依托于底層Spring Framework的基礎(chǔ)支撐,以及完善強(qiáng)大的特性設(shè)計,Spring Boot已成為業(yè)界流行的應(yīng)用和微服務(wù)開發(fā)

    2024年02月14日
    瀏覽(19)
  • 【Spring Boot系列】- Spring Boot事務(wù)應(yīng)用詳解

    事務(wù)(Transaction)是數(shù)據(jù)庫操作最基本單元,邏輯上一組操作,要么都成功。如果有一個操作失敗。則事務(wù)操作都失?。ɑ貪L(Rollback))。 事務(wù)的四個特性(ACID): 1. 原子性(Atomicity) 一個事務(wù)(Transaction)中的所有操作,要么全部完成,要么全部不完成,不會結(jié)束在中間

    2024年02月08日
    瀏覽(25)
  • Spring Boot 事務(wù)和事務(wù)傳播機(jī)制

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

    事務(wù)定義 將一組操作封裝成一個執(zhí)行單元 (封裝到一起),這一組的執(zhí)行具備原子性, 那么就要么全部成功,要么全部失敗. 為什么要用事務(wù)? 比如轉(zhuǎn)賬分為兩個操作: 第一步操作:A 賬戶-100 元。 第二步操作:B賬戶 +100 元。 如果沒有事務(wù),第一步執(zhí)行成功了,第二步執(zhí)行失敗了,

    2024年02月11日
    瀏覽(25)
  • 在 Spring Boot 中使用事務(wù)

    當(dāng)調(diào)用使用 @Transactional 注解的方法時,Spring Boot利用事務(wù)管理器來創(chuàng)建或加入事務(wù)。事務(wù)管理器監(jiān)視事務(wù)的生命周期,根據(jù)操作結(jié)果進(jìn)行提交或回滾。 Spring Boot支持各種事務(wù)隔離級別,包括READ_UNCOMMITTED(讀取未提交的數(shù)據(jù))、READ_COMMITTED(讀取已提交的數(shù)據(jù))、REPEATABLE_READ(

    2024年01月25日
    瀏覽(27)
  • Spring Boot 集成 API 文檔 - Swagger、Knife4J、Smart-Doc

    Spring Boot 集成 API 文檔 - Swagger、Knife4J、Smart-Doc

    Swagger 作為 API 設(shè)計和文檔的強(qiáng)大工具,是一個由專門的工具集合支持的框架,它在整個 API 的生命周期中發(fā)揮作用,從設(shè)計和文檔,到測試和部署。通過提供可視化界面,Swagger 讓開發(fā)人員和最終用戶都能清晰地理解和操作 API。 使用建議:筆者建議優(yōu)先考慮 Knife4J,它已經(jīng)能

    2024年01月22日
    瀏覽(22)
  • spring boot 整合jdbc和事務(wù)

    spring boot 整合jdbc和事務(wù)

    目錄 1、j在pom文件中引入dbc驅(qū)動與mybatis ?2、數(shù)據(jù)庫連接池參數(shù)配置 3、mybatis配置 4、application配置 5、通用mapper配置 6、編寫UserMapper 7、user表(需要自行去mysql創(chuàng)建數(shù)據(jù)庫表新增用戶數(shù)據(jù),sql語句見下一步) 8、sql信息 9、UserService編寫 10、測試結(jié)果 11、測試輸出結(jié)果 訪問效果

    2024年02月15日
    瀏覽(21)
  • Spring Boot 中的事務(wù)超時時間

    Spring Boot 中的事務(wù)超時時間

    在 Spring Boot 中,事務(wù)管理是一個非常重要的話題。當(dāng)我們在數(shù)據(jù)庫中執(zhí)行一些復(fù)雜的操作時,需要確保這些操作能夠在一定的時間內(nèi)完成,否則可能會導(dǎo)致數(shù)據(jù)一致性問題。為了解決這個問題,Spring Boot 提供了事務(wù)超時時間的設(shè)置。 事務(wù)超時時間是指一個事務(wù)在執(zhí)行中最長

    2024年02月07日
    瀏覽(20)
  • Spring Boot 中的 Seata 分布式事務(wù)

    Spring Boot 中的 Seata 分布式事務(wù)

    在分布式系統(tǒng)中,保證數(shù)據(jù)的一致性是一個非常重要的問題。傳統(tǒng)的 ACID 事務(wù)模型雖然能夠保證單個數(shù)據(jù)庫的數(shù)據(jù)一致性,但是在分布式系統(tǒng)中卻很難實(shí)現(xiàn)。因此,近年來出現(xiàn)了一些新的事務(wù)模型,其中 Seata 就是一種比較流行的模型。 在本文中,我們將介紹 Spring Boot 中的

    2024年02月09日
    瀏覽(17)
  • Java企業(yè)級信息系統(tǒng)開發(fā)學(xué)習(xí)筆記(4.2)Spring Boot項(xiàng)目單元測試、熱部署與原理分析

    Java企業(yè)級信息系統(tǒng)開發(fā)學(xué)習(xí)筆記(4.2)Spring Boot項(xiàng)目單元測試、熱部署與原理分析

    該文章主要為完成實(shí)訓(xùn)任務(wù),詳細(xì)實(shí)現(xiàn)過程及結(jié)果見【http://t.csdn.cn/pG623】 1. 添加測試依賴啟動器和單元測試 修改pom.xml文件,添加依賴 刷新項(xiàng)目依賴 2. 創(chuàng)建測試類與測試方法 在 src/test/java 里創(chuàng)建 cn.kox.boot 包,創(chuàng)建測試類 TestHelloWorld01 給測試類添加測試啟動器注解與Spring

    2024年02月10日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包