spring註解事務行為之@Transactional
阿新 • • 發佈:2018-12-11
屬性:propagation
含義:REQUIRED:方法A呼叫時沒有事務新建一個事務,當在方法A呼叫另外一個方法B的
時候,方法B將使用相同的事務。如果方法B發生異常需要資料回滾的時候,整個事務資料
回滾。
REQUIRES_NEW:對於方法A和B,在方法呼叫的時候無論是否有事務都開啟一個新的 的作用是將
事務。如果方法B有異常不會導致方法A的資料回滾。
NESTED
SUPPORTS:方法呼叫時有事務就用事務,沒有就不用。
NOT_SUPPORTED:強制方法不在事務中執行,若有事務,在方法呼叫到結束階段事務
將會被掛起
NEVER:強制方法不在事務中執行,若有事務則丟擲異常。
MANDATORY
預設值:REQUIRED
屬性:isolation
含義:READ_UNCOMMITTED:對於A事務裡修改了一條記錄但沒有提交事務,在B事務可以讀取到
修改後的記錄,會導致髒讀、不可重複讀及幻讀。
READ_COMMITTED
提交後的記錄。阻止髒讀,但可能會導致不可重複讀和幻讀。
REPEATABLE_READ:不僅能實現READ_COMMITTED的功能,而且還能阻當A事務讀取了一條
記錄,B事務將不允許修改這條記錄。阻止髒讀和不可重複讀,但可出現幻讀。
SERIALIZABLE:此級別下事務是順序執行的,可以避免上述級別的缺陷,但開銷較大
DEFAULT:使用當前資料庫的預設隔離界級別,如Oracle、SQL Server是READ_COMMITTED。
Mysql是REPEATABLE_READ.
預設值:DEFAULT
屬性:timeout
含義:指定事務過期時間,預設為當前資料庫的事務過期時間
預設值:TIMEOUT_DEFAULT
屬性:readOnly
含義:指定當前事務是否只讀事務
預設值:false
屬性:rollbackFor
含義:指定哪個或者哪些異常可以引起事務回滾
預設值:Throwable的子類
屬性:noRollbackFor
含義:指定哪個或者哪些異常不可以引起事務回滾
預設值:Throwable的子類
用法:@Transactional註解可以在類和方法上使用,當註解在類上則所有public方法都是開啟事務的,
當註解在類和方法同時使用了@Transactional註解則會過載方法級別的註解。