關於Springboot中的@Transactional註解簡單小記

學習java,事務一般都是項目中不可或缺的,只是有些時候用的較少,所以接觸也比較少,但對於這個東西必須要記錄一下,不管是面試還是工作中,一定會遇到。

兩種事務管理方式:

  • 編碼式事務管理:將事務控制代碼編寫在業務代碼之中。
  • 聲明式事務管理:基於AOP(面向切面編程),事務管理與業務邏輯解耦。聲明式事務管理的兩種實現:
    • 在配置文件(xml)中配置。
    • 基於@Transactional註解。

 

 在Springboot項目中,一般用@Transactional註解

 

1.開啓事務註解

在項目主類上,加上註解@EnableTransactionManagement開啓事務註解(ps:一般無需配置)

@EnableTransactionManagement
public class ICApiApplication {
    public static void main(String[] args) {
        SpringApplication.run(ICApiApplication.class, args);
    }
}

2.在目標類、方法上添加註解@Transactional

2.1 如果註解在目標類上,則表示此類所有方法都開啓事務

2.2 如果註解在目標方法上,則表示只有此方法開啓事務

2.3 如果一個方法上存在@Transactional,且其所屬類上同樣存在@Transactional,則以方法級別的事務配置爲準。

3.是否發生了自調用問題

3.1 只有當事務方法被當前類以外的代碼調用時,纔會才由 Spring 生成的代理對象來管理。

3.2 自調用問題:當事務方法被本類內部方法調用時,@Transactional並不生效。

  3.2.1 同一個類中,非事務方法調用事務方法,當事務方法發生異常時,事務控制無效,不會回滾

  3.2.2 同一個類中,事務方法調用非事務方法,當發生異常時,事務控制有效,因爲事務方法被外部代碼調用;即使非事務方法又調用事務方法,事務依然有效,此時事務已經開啓管理

4.對所有異常都回滾

@Transactional(rollbackFor = Exception.class)

 

參考來源:https://blog.csdn.net/hanchao5272/article/details/90343882

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章