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

Spring的事務(wù)(@Transactional)

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


一、介紹

  • Spring事務(wù)的本質(zhì),其實(shí)就是通過 Spring AOP 切面技術(shù)
  • Spring事務(wù)支持2種使用方式
    1. 聲明式事務(wù)(注解方式)
    2. 編程式事務(wù)(代碼方式):代碼需要手動控制,比較繁瑣,一般不使用

二、開啟事務(wù)

  • SpringBoot

    • 默認(rèn)開啟了事務(wù)
  • Spring文章來源地址http://www.zghlxwxcb.cn/news/detail-833930.html

    <!-- 事務(wù)管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    
    <!-- 注解驅(qū)動,值為事務(wù)管理器的id -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    

三、聲明式事務(wù)(@Transactional)

1、原理

  • Spring的事務(wù)是使用AOP來實(shí)現(xiàn)的,在執(zhí)行目標(biāo)方法的前和后,加上了事務(wù)管理的代碼,在目標(biāo)方法執(zhí)行成功后,提交事務(wù),拋出異常,則回滾事務(wù)

2、注解標(biāo)注的位置

  1. 接口上:不推薦。Spring事務(wù)是通過AOP來實(shí)現(xiàn)的,而AOP是基于動態(tài)代理實(shí)現(xiàn)的,AOP的動態(tài)代理有2種方式,如果配置了 AOP為cglib(基于類),將會導(dǎo)致該注解失效
  2. 類上:該類所有的public方法都配置相同的事務(wù)屬性
  3. 方法上:當(dāng)類上標(biāo)注了,方法上也標(biāo)注了,方法上標(biāo)注的優(yōu)先級更高

3、事務(wù)的條件

  1. 含有注解的類必須被Spring管理,加載到IOC容器中
  2. 方法必須是public,沒有權(quán)限訪問則無法進(jìn)行事務(wù)管理
  3. 如果視為操作錯誤,必須拋出異常,默認(rèn)只有拋出RuntimeException 或者 Error才會回滾

4、事務(wù)生效、不生效的場景

  1. 數(shù)據(jù)庫表的引擎不是innodb。不生效
  2. 含有注解的類沒有加載到IOC容器中。不生效
  3. 注解標(biāo)注在非public的方法上。不生效
  4. 拋出的異常不是指定的回滾異常類型rollbackFor、rollbackForClassName、noRollbackFornoRollbackForClassName。不生效
  5. 拋出的異常被catch了。不生效
  6. methodA調(diào)用methodB,2個方法在同1個類
    • methodA上不加注解,methodB上加注解。methodB的事務(wù)不生效
    • methodA上加注解,methodB加不加注解,事務(wù)都是有效的。則AB在同一事務(wù)中
  7. methodA調(diào)用methodB,2個方法在不同的類
    • methodA加注解,methodB加不加注解,事務(wù)都是有效的
    • methodA不加注解,methodB加注解,只有B是有事務(wù)的

5、@Transactional屬性

1、value、transactionManager

  • 指定事務(wù)管理器
  • 一個工程可能訪問多個數(shù)據(jù)源,可能會配置多個事務(wù)管理器

2、propagation

  • 事務(wù)的傳播行為(7種)
//如果當(dāng)前存在事務(wù)則加入事務(wù);如果當(dāng)前不存在事務(wù),則創(chuàng)建一個新的事務(wù)。默認(rèn)
Propagation.REQUIRED

//如果當(dāng)前存在事務(wù),則加入該事務(wù);如果當(dāng)前不存在事務(wù),則以非事務(wù)的方式繼續(xù)運(yùn)行
Propagation.SUPPORTS

//如果當(dāng)前存在事務(wù),則加入該事務(wù);如果當(dāng)前不存在事務(wù),則拋出異常
//與Propagation.NEVER相反
Propagation.MANDATORY

//不管是否存在事務(wù),都創(chuàng)建一個新的事務(wù),原來的掛起,新的執(zhí)行完畢,繼續(xù)執(zhí)行老的
Propagation.REQUIRES_NEW

//以非事務(wù)的方式執(zhí)行,如果當(dāng)前存在事務(wù),則將其掛起
Propagation.NOT_SUPPORTED

//以非事務(wù)的方式運(yùn)行;如果當(dāng)前存在事務(wù),則拋出異常
//與Propagation.MANDATORY相反
Propagation.NEVER

//如果當(dāng)前存在事務(wù),則在該事務(wù)內(nèi)嵌套事務(wù)運(yùn)行;如果當(dāng)前不存在事務(wù),則創(chuàng)建一個新的事務(wù)
Propagation.NESTED

3、isolation

  • 事務(wù)隔離級別
//。默認(rèn)
Isolation.DEFAULT

//讀取未提交數(shù)據(jù),可能會出現(xiàn)臟讀、不可重復(fù)讀、幻讀
Isolation.READ_UNCOMMITTED

//讀取已提交數(shù)據(jù),可能會出現(xiàn)不可重復(fù)讀、幻讀
Isolation.READ_COMMITTED

//可重復(fù)讀,可能會出現(xiàn)幻讀
Isolation.REPEATABLE_READ

//串行化讀取,事務(wù)只能依次執(zhí)行,避免了臟讀、不可重復(fù)讀、幻讀。執(zhí)行效率低
Isolation.SERIALIZABLE

4、timeout

  • 事務(wù)超時
  • 單位s,默認(rèn)-1
  • 是指一個事務(wù)所允許執(zhí)行的最長時間,如果超過該時間限制但事務(wù)還沒有完成,則自動回滾事務(wù),并拋出TransactionTimedOutException異常,阻止可能出現(xiàn)的長時間的阻塞系統(tǒng)或者占用系統(tǒng)資源

5、readOnly

  • 是否只讀
  • true-只讀,如果方法內(nèi)存在增、刪、改則會拋出異常;false-讀寫,增、刪、改、查操作都允許。默認(rèn)false

6、rollbackFor

  • 回滾的異常類型
  • 異常類的class數(shù)組,Class<? extends Throwable>[]

7、rollbackForClassName

  • 不會回滾的異常類型
  • 異常類名的String數(shù)組,String[]

8、noRollbackFor

  • 不會回滾的異常類型
  • 異常類的class數(shù)組,Class<? extends Throwable>[]

9、noRollbackForClassName

  • 不會回滾的異常類型
  • 異常類名的String數(shù)組,String[]

到了這里,關(guān)于Spring的事務(wù)(@Transactional)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(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中操作數(shù)據(jù)庫的幾種并發(fā)事務(wù)方式

    當(dāng)有多個 并發(fā) 事務(wù)時,會發(fā)生丟失更新異常。來自一個或多個 事務(wù) 的更新可能會丟失,因?yàn)槠渌聞?wù)會用其結(jié)果覆蓋它。 讓我們通過一個例子來檢驗(yàn)一下。考慮以下執(zhí)行事務(wù)的方法。 public void withdraw(Long accountId, double amount) { Account account = accountRepository.findById(accountId).orEl

    2024年01月22日
    瀏覽(42)
  • Spring的事務(wù)(@Transactional)

    Spring事務(wù)的本質(zhì),其實(shí)就是通過 Spring AOP 切面技術(shù) Spring事務(wù)支持2種使用方式 聲明式事務(wù)(注解方式) 編程式事務(wù)(代碼方式):代碼需要手動控制,比較繁瑣,一般不使用 SpringBoot 默認(rèn)開啟了事務(wù) Spring Spring的事務(wù)是使用AOP來實(shí)現(xiàn)的,在執(zhí)行目標(biāo)方法的前和后,加上了事務(wù)

    2024年02月21日
    瀏覽(21)
  • 【spring(四)】Spring事務(wù)管理和@Transactional注解

    【spring(四)】Spring事務(wù)管理和@Transactional注解

    ??鍵盤敲爛,年薪30萬?? 目錄 Spring中的事務(wù)管理 問題拋出: 解決方案: @Transactional注解: rollbackFor屬性: propagation屬性: 應(yīng)用: ??總結(jié) 知識回顧: ?什么是事務(wù) 事務(wù)是對數(shù)據(jù)操作的集合,它是數(shù)據(jù)操作的最小執(zhí)行單位,也就是說,要么一個事務(wù)中操作全部執(zhí)行完畢,

    2024年01月17日
    瀏覽(62)
  • Spring @Transactional事務(wù)傳播機(jī)制詳解

    我們?nèi)粘9ぷ髦袠O少使用事務(wù)傳播級別,單純只是使用事務(wù)和rollbackfor拋出異常來解決事務(wù)問題,但其實(shí)我們很多時候使用的是不正確的,或者說會造成事務(wù)粒度過大,本文詳解一下事務(wù)傳播級別,也讓自己更好地處理事務(wù)問題。 1.什么是事務(wù)傳播機(jī)制? 舉個栗子,方法A是一

    2024年02月14日
    瀏覽(25)
  • Spring——事務(wù)注解@Transactional【建議收藏】

    Spring——事務(wù)注解@Transactional【建議收藏】

    在某些業(yè)務(wù)場景下,如果一個請求中,需要同時寫入多張表的數(shù)據(jù)或者執(zhí)行多條sql,為了保證操作的原子性(要么同時成功,要么同時失?。?,避免數(shù)據(jù)不一致的情況,我們一般都會用到事務(wù);Spring框架下,我們經(jīng)常會使用@Transactional注解來管理事務(wù); 本篇介紹Spring的事務(wù)注

    2024年02月03日
    瀏覽(24)
  • Spring 聲明式事務(wù) @Transactional(基本使用)

    Spring 聲明式事務(wù) @Transactional(基本使用)

    ????????聲明式事務(wù)的實(shí)現(xiàn)很簡單,只需要在需要事務(wù)的?法上添加 @Transactional 注解就可以實(shí)現(xiàn)了.?需?動開啟事務(wù)和提交事務(wù),進(jìn)??法時?動開啟事務(wù),?法執(zhí)?完會?動提交事務(wù),如果中途發(fā)?了 沒有處理的異常會?動回滾事務(wù). ? ? ? ? 廢話不多說,直接看代碼實(shí)現(xiàn),

    2024年01月23日
    瀏覽(24)
  • Spring 事務(wù)(編程式事務(wù)、聲明式事務(wù)@Transactional、事務(wù)隔離級別、事務(wù)傳播機(jī)制)

    Spring 事務(wù)(編程式事務(wù)、聲明式事務(wù)@Transactional、事務(wù)隔離級別、事務(wù)傳播機(jī)制)

    本篇重點(diǎn)總結(jié): 在 Spring 項(xiàng)目中使用事務(wù),有兩種方式:編程式手動操作和聲明式自動提交,聲明式自動提交使用最多,只需要在方法上添加注解 @Transactional 設(shè)置事務(wù)的隔離級別 @Transactional(isolation = Isolation.SERIALIZABLE),Spring 中的事務(wù)隔離級別有5種 設(shè)置事務(wù)的傳播機(jī)制 @Tra

    2024年02月03日
    瀏覽(54)
  • Spring5學(xué)習(xí)隨筆-事務(wù)屬性詳解(@Transactional)

    學(xué)習(xí)視頻:【孫哥說Spring5:從設(shè)計模式到基本應(yīng)用到應(yīng)用級底層分析,一次深入淺出的Spring全探索。學(xué)不會Spring?只因你未遇見孫哥】 事務(wù)是 保證業(yè)務(wù)操作完整性的一種數(shù)據(jù)庫機(jī)制 事務(wù)的4特點(diǎn):ACID A 原子性 C 一致性 I 隔離性 D 持久性 JDBC: Connection.setAutoCommit(false) Connect

    2024年02月05日
    瀏覽(24)
  • Spring 事務(wù)的使用、隔離級別、@Transactional的使用

    Spring 事務(wù)的使用、隔離級別、@Transactional的使用

    ????????Spring事務(wù)是Spring框架提供的一種機(jī)制,用于管理應(yīng)用程序中的數(shù)據(jù)庫事務(wù)。 ????????事務(wù)是一組數(shù)據(jù)庫操作的執(zhí)行單元,要么全部成功提交,要么全部失敗回滾,保證數(shù)據(jù)的一致性和完整性。 Spring事務(wù)提供了聲明式事務(wù)和編程式事務(wù)兩種方式: 編程式事務(wù):

    2024年02月15日
    瀏覽(23)
  • 【JavaEE】Spring事務(wù)-@Transactional參數(shù)介紹-事務(wù)的隔離級別以及傳播機(jī)制

    【JavaEE】Spring事務(wù)-@Transactional參數(shù)介紹-事務(wù)的隔離級別以及傳播機(jī)制

    【JavaEE】Spring 事務(wù)(2) 參數(shù) 作用 value 當(dāng)配置了多個事務(wù)管理器時,可以使用該屬性指定選擇哪個事務(wù)管理器 transactionManager 當(dāng)配置了多個事務(wù)管理器時,可以使用該屬性指定選擇哪個事務(wù)管理器 isolation 事務(wù)的隔離級別.默認(rèn)值為solation.DEFAULT propagation 事務(wù)的傳播機(jī)制,默認(rèn)值

    2024年02月10日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包