required:如果存在乙個事務,則支援當前事務。如果沒有事務則開啟乙個新的事務。
repeatable_read:這種事務隔離級別可以防止髒讀,不可重複讀。但是可能出現幻像讀。它除了保證乙個事務不能讀取另乙個事務未提交的資料外,還保證了避免下面的情況產生(不可重複讀)
supports:如果當前存在事務,則加入該事務;如果當前不存在事務,則以非事務的方式繼續執行
mandatory:如果當前存在事務,則加入該事務;如果當前不存在事務,則丟擲異常。
requires_new:重新建立乙個新的事務,如果當前存在事務,暫停當前的事務。
not_supported:以非事務的方式執行,如果當前存在事務,暫停當前的事務
never:以非事務的方式執行,如果當前存在事務,則丟擲異常
nested:同required
事務的超時時間,預設值為-1。如果超過該時間限制但事務還沒有完成,則自動回滾事務
指定事務是否為唯讀事務,預設值為 false;為了忽略那些不需要事務的方法,比如讀取資料,可以設定 read-only 為 true
回滾策略為exception出現異常之後 ,用於指定能夠觸發事務回滾的異常型別,可以指定多個異常型別
丟擲指定的異常型別,不回滾事務,也可以指定多個異常型別。
transactionaspectsupport.currenttransactionstatus().setrollbackonly();
函式內捕獲異常時需要來設定事務回滾狀態
transactional的作用域
@transactional經常遇到的幾個場景:
@transactional 加於private方法, 無效
@transactional 加於未加入介面的public方法, 再通過普通介面方法呼叫, 無效
@transactional 加於介面方法, 無論下面呼叫的是private或public方法, 都有效
@transactional 加於介面方法後, 被本類普通介面方法直接呼叫, 無效
@transactional 加於介面方法後, 被本類普通介面方法通過介面呼叫, 有效
@transactional 加於介面方法後, 被它類的介面方法呼叫, 有效
@transactional 加於介面方法後, 被它類的私有方法呼叫後, 有效
Transactional註解初見
之前一直使用宣告式事務,切面程式設計的配置方式讓程式設計者忘記了事務的存在,一旦離開,發現這個事務還是蠻重要的 public inte ce userservice transactional public class userserviceimpl implements userservice p...
Transactional配置詳解
1 事務的7種屬性 propagation required 支援當前事務,如果當前沒有事務,就新建乙個事務。預設配置,也是常用的選擇。propagation supports 支援當前事務,如果當前沒有事務,就以非事務方式執行。propagation mandatory 支援當前事務,如果當前沒有...
Transactional註解詳解
預設遇到throw new runtimeexception 會回滾 需要捕獲的throw new exception 不會回滾 指定回滾 transactional rollbackfor exception.class public void methodname 指定不回滾 transacti...