1. 程式人生 > >spring註解事務行為之@Transactional

spring註解事務行為之@Transactional

屬性:propagation
    含義:REQUIRED:方法A呼叫時沒有事務新建一個事務,當在方法A呼叫另外一個方法B的
    時候,方法B將使用相同的事務。如果方法B發生異常需要資料回滾的時候,整個事務資料
    回滾。
           REQUIRES_NEW:對於方法A和B,在方法呼叫的時候無論是否有事務都開啟一個新的 的作用是將
    事務。如果方法B有異常不會導致方法A的資料回滾。
           NESTED

:和REQUIRES_NEW類似,僅支援JDBC,不支援JPA和Hibernate
           SUPPORTS:方法呼叫時有事務就用事務,沒有就不用。
           NOT_SUPPORTED:強制方法不在事務中執行,若有事務,在方法呼叫到結束階段事務
    將會被掛起
           NEVER:強制方法不在事務中執行,若有事務則丟擲異常。
           MANDATORY
:強制方法在事務中執行,若無事務則丟擲異常。           
    預設值:REQUIRED
    
    屬性:isolation
    含義:READ_UNCOMMITTED:對於A事務裡修改了一條記錄但沒有提交事務,在B事務可以讀取到
    修改後的記錄,會導致髒讀、不可重複讀及幻讀。
          READ_COMMITTED
:只有當在A事務裡修改了一條記錄且提交事務之後,B事務才可以讀取到
    提交後的記錄。阻止髒讀,但可能會導致不可重複讀和幻讀。
          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註解則會過載方法級別的註解。