【Spring註解】事務註解@Transactional

hudad發表於2024-06-18

@Transactional作用:就是在當前這個方法執行開始之前來開啟事務,方法執行完畢之後提交事務。如果在這個方法執行的過程當中出現了異常,就會進行事務的回滾操作

@Transactional註解書寫位置:

  • 方法
    • 當前方法交給spring進行事務管理
    • 當前類中所有的方法都交由spring進行事務管理
  • 介面
    • 介面下所有的實現類當中所有的方法都交給spring 進行事務管理

說明:可以在application.yml配置檔案中開啟事務管理日誌,這樣就可以在控制看到和事務相關的日誌資訊了

#spring事務管理日誌
logging:
  level:
    org.springframework.jdbc.support.JdbcTransactionManager: debug

@Transactional註解當中的兩個常見的屬性:

  1. 異常回滾的屬性:rollbackFor
  2. 事務傳播行為:propagation

rollbackFor

預設情況下,只有出現RuntimeException(執行時異常)才會回滾事務。配置@Transactional註解當中的rollbackFor屬性,透過rollbackFor這個屬性可以指定出現何種異常型別回滾事務。

@Transactional(rollbackFor=Exception.class)

propagation

事務的傳播行為

  • 就是當一個事務方法被另一個事務方法呼叫時,這個事務方法應該如何進行事務控制。

我們要想控制事務的傳播行為,在@Transactional註解的後面指定一個屬性propagation,透過 propagation 屬性來指定傳播行為。

屬性值 含義
REQUIRED 【預設值】需要事務,有則加入,無則建立新事務
REQUIRES_NEW 需要新事務,無論有無,總是建立新事務
SUPPORTS 支援事務,有則加入,無則在無事務狀態中執行
NOT_SUPPORTED 不支援事務,在無事務狀態下執行,如果當前存在已有事務,則掛起當前事務
MANDATORY 必須有事務,否則拋異常
NEVER 必須沒事務,否則拋異常

對於這些事務傳播行為,我們只需要關注以下兩個就可以了:

  1. REQUIRED(預設值)
  2. REQUIRES_NEW

相關文章