Transactional引數學習筆記

2021-10-01 01:49:21 字數 1140 閱讀 8665

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...