@Transactional作用:就是在當前這個方法執行開始之前來開啟事務,方法執行完畢之後提交事務。如果在這個方法執行的過程當中出現了異常,就會進行事務的回滾操作
@Transactional註解書寫位置:
- 方法
- 當前方法交給spring進行事務管理
- 類
- 當前類中所有的方法都交由spring進行事務管理
- 介面
- 介面下所有的實現類當中所有的方法都交給spring 進行事務管理
說明:可以在application.yml配置檔案中開啟事務管理日誌,這樣就可以在控制看到和事務相關的日誌資訊了
#spring事務管理日誌
logging:
level:
org.springframework.jdbc.support.JdbcTransactionManager: debug
@Transactional註解當中的兩個常見的屬性:
- 異常回滾的屬性:rollbackFor
- 事務傳播行為:propagation
rollbackFor
預設情況下,只有出現RuntimeException(執行時異常)才會回滾事務。配置@Transactional註解當中的rollbackFor屬性,透過rollbackFor這個屬性可以指定出現何種異常型別回滾事務。
@Transactional(rollbackFor=Exception.class)
propagation
事務的傳播行為
- 就是當一個事務方法被另一個事務方法呼叫時,這個事務方法應該如何進行事務控制。
我們要想控制事務的傳播行為,在@Transactional註解的後面指定一個屬性propagation,透過 propagation 屬性來指定傳播行為。
屬性值 | 含義 |
---|---|
REQUIRED | 【預設值】需要事務,有則加入,無則建立新事務 |
REQUIRES_NEW | 需要新事務,無論有無,總是建立新事務 |
SUPPORTS | 支援事務,有則加入,無則在無事務狀態中執行 |
NOT_SUPPORTED | 不支援事務,在無事務狀態下執行,如果當前存在已有事務,則掛起當前事務 |
MANDATORY | 必須有事務,否則拋異常 |
NEVER | 必須沒事務,否則拋異常 |
… |
對於這些事務傳播行為,我們只需要關注以下兩個就可以了:
- REQUIRED(預設值)
- REQUIRES_NEW