最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

解決SpringBoot中使用@Transactional注解遇到的問題

 更新時間:2021年09月22日 11:42:26   作者:f0cf20ca7354  
這篇文章主要介紹了SpringBoot中使用@Transactional注解遇到的問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

使用@Transactional注解遇到的問題

1、不建議在接口上添加@Transactional注解

一般在service類標簽上添加@Transactional即可

2、@Transactional注解

只能應用到public可見度的方法上。如果應用到protected、private或者package可見度的方法上時,不會報錯,但事務也不會起作用

3、默認情況下

spring會對uncheck異常進行事務回滾的;如果是checked異常則不會回滾,可添加注解 @Transactional(rollbackFor=Exception.class) 是的checked異?;貪L。

  • uncheck異常:java里面將派生于Error或者RuntimeException(比如空指針,1/0)的異常
  • checked異常:其他繼承自java.lang.Exception得異常統(tǒng)稱為Checked Exception,如IOException、TimeoutException等

4、數(shù)據(jù)庫引擎需要支持事務管理

如果是mysql,注意表要使用事務的引擎,比如innodb,如果是myisam,事務不會起作用的

5、同一類中methodA()方法

沒有@Transactional 注解,在其內(nèi)部調(diào)用有@Transactional 注解的方法,有@Transactional 注解的方法methodB()的事務被忽略,不會開啟新的事務,也不會發(fā)生回滾。例如:

@Service
public class TransactionService {
public void methodA(){
    this.methodB();
}
@Transactional
public void methodB(){
}
}

原因:Spring采用動態(tài)代理(AOP)實現(xiàn)對bean的管理和切片,它為我們的每個class生成一個代理對象。只有在代理對象之間進行調(diào)用時,可以觸發(fā)切面邏輯。在 Spring 的 AOP 代理下,只有目標方法由外部調(diào)用,目標方法才由 Spring 生成的代理對象來管理。

詳解:Spring的事務管理是通過AOP實現(xiàn)的,其AOP的實現(xiàn)對于非final類是通過cglib這種方式,即生成當前類的一個子類作為代理類,然后在調(diào)用其下的方法時,會判斷這個方法有沒有@Transactional注解,如果有的話,則會開啟一個新的事務,并通過動態(tài)代理實現(xiàn)事務管理(攔截方法調(diào)用,執(zhí)行事務等切面)。

當methodA()中調(diào)用methodB()時,并不是使用的代理對象,而是普通的javabean,從而導致this.methodB()時也不是代碼對象,從而導致@Transactional失敗,即發(fā)現(xiàn)methodA()上并沒有@Transactional注解,所以整個AOP代理過程(事務管理)不會發(fā)生。

解決辦法:

1、把這兩個方法分開到不同的類中;

2、把注解@Transactional加到類名上面去;

3、把注解@Transactional加到methodA()方法上,methodB()不添加注解,在調(diào)用methodB()時兩個方法的事務都會生效,因為methodA()默認的事務傳播屬性為PROPAGATION_REQUIRED,此時methodB()會加入到methodA()中

@Service
public class TransactionService {
@Transactional
public void methodA(){
    this.methodB();
}
public void methodB(){
}
}

4、獲取本對象的代理對象,再進行調(diào)用。具體操作如:

  • Spring-content.xml上下文中,增加配置:<aop:aspectj-autoproxy expose-proxy="true"/>
  • 在TransactionService 中,用(transactionService )(AopContext.currentProxy()),獲取到TransactionService 的代理類,再調(diào)用事務方法,強行經(jīng)過代理類,激活事務切面。

springboot 注解transactional失效

1、在方法中捕獲了異常

那么該方法事務不會回滾。本類中A方法(有事務注解)調(diào)用其他類中B方法(有事務注解,該類在容器中),B方法中捕獲了異常,事務失效不可以回滾,在B方法中的catch里進行異常拋出則可以正?;貪L。

本類中A方法(有事務注解)調(diào)用其他類中B方法(有事務注解,該類在容器中),A方法中捕獲了異常,spring事務機制檢測到異常,進行回滾。

所以最好在業(yè)務層catch中拋出異常讓控制層捕獲。

2、spring中事務是代理模式

在該類中A方法調(diào)用本類中B方法,A方法上沒有事務注解,B方法上有事務注解,則B方法中出現(xiàn)異常,B方法事務不會回滾,A方法沒有事務注解也不會回滾。

3、A方法如果有事務注解

調(diào)用了本類B方法,B方法出現(xiàn)異常也整體可回滾。

4、本類中A方法調(diào)用

其他類中B方法(有事務注解,該類在容器中),B方法發(fā)生異常,可以回滾。

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

相關(guān)文章

  • JUnit中獲取測試類及方法的名稱實現(xiàn)方法

    JUnit中獲取測試類及方法的名稱實現(xiàn)方法

    這篇文章主要介紹了JUnit中獲取測試類及方法的名稱實現(xiàn)方法,本文使用了JUnit中提供的TestName實現(xiàn),不過還有一些編程細節(jié)需要注意,需要的朋友可以參考下
    2015-06-06
  • 深入理解hibernate的三種狀態(tài)

    深入理解hibernate的三種狀態(tài)

    本篇文章主要介紹了深入理解hibernate的三種狀態(tài) ,主要包括了transient(瞬時狀態(tài)),persistent(持久化狀態(tài))以及detached(離線狀態(tài)),有興趣的同學可以了解一下
    2017-05-05
  • spring cloud gateway全局過濾器實現(xiàn)向request header中放數(shù)據(jù)

    spring cloud gateway全局過濾器實現(xiàn)向request header中放數(shù)據(jù)

    這篇文章主要介紹了spring cloud gateway全局過濾器實現(xiàn)向request header中放數(shù)據(jù)的操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • Java中ArrayList的使用詳細介紹

    Java中ArrayList的使用詳細介紹

    這篇文章主要介紹了Java中ArrayList的使用,本文給大家詳細講述該相關(guān)的知識點,并且會通過大量的案例加以說明,需要的朋友可以參考一下
    2022-04-04
  • 2022版IDEA創(chuàng)建一個maven項目的超詳細圖文教程

    2022版IDEA創(chuàng)建一個maven項目的超詳細圖文教程

    IDEA是用于java語言開發(fā)的集成環(huán)境,并且經(jīng)常用于maven、spring、MyBatis等項目的開發(fā),下面這篇文章主要給大家介紹了關(guān)于2022版IDEA創(chuàng)建一個maven項目的超詳細圖文教程,需要的朋友可以參考下
    2023-02-02
  • Springboot es包版本異常解決方案

    Springboot es包版本異常解決方案

    這篇文章主要介紹了springboot 項目依賴 es包版本異常,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • SpringBoot項目中實現(xiàn)訪問HTML頁面

    SpringBoot項目中實現(xiàn)訪問HTML頁面

    文章介紹了Spring Boot項目中首頁的配置方法,包括將`index.html`作為首頁面、使用自定義`xxx.html`作為首頁面以及通過Controller控制層返回任意HTML頁面,同時,文章還強調(diào)了在`pom.xml`中添加依賴的重要性,并詳細說明了使用`@Controller`注解來渲染頁面
    2025-11-11
  • SpringBoot利用Redis實現(xiàn)防止訂單重復提交的解決方案

    SpringBoot利用Redis實現(xiàn)防止訂單重復提交的解決方案

    在涉及訂單操作的業(yè)務中,防止訂單重復提交是一個常見需求,用戶可能會因誤操作或網(wǎng)絡延遲而多次點擊提交訂單按鈕,導致訂單重復提交,所以本文給大家介紹了SpringBoot利用Redis實現(xiàn)防止訂單重復提交的解決方案,需要的朋友可以參考下
    2024-10-10
  • JAVA 注解詳解及簡單實例

    JAVA 注解詳解及簡單實例

    這篇文章主要介紹了JAVA 注解詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-05-05
  • 使用MyBatis進行簡單的更新與查詢方式

    使用MyBatis進行簡單的更新與查詢方式

    這篇文章主要介紹了使用MyBatis進行簡單的更新與查詢方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10

最新評論

分宜县| 宁河县| 湘阴县| 新巴尔虎右旗| 夏津县| 汽车| 和顺县| 鄱阳县| 论坛| 彰化县| 云龙县| 太白县| 沈丘县| 旬邑县| 呼玛县| 花垣县| 囊谦县| 古蔺县| 汉中市| 雷波县| 南投市| 崇礼县| 涟水县| 恩平市| 西贡区| 高安市| 文登市| 雅安市| 姚安县| 高唐县| 新建县| 江源县| 广宗县| 侯马市| 大理市| 静安区| 通州区| 信丰县| 土默特左旗| 濮阳市| 兴化市|