參數一: propagation
詳情如下:
REQUIRED:支持當前事務,如果當前沒有事務,就新建一個事務。這是最常見的選擇。
SUPPORTS:支持當前事務,如果當前沒有事務,就以非事務方式執行。
MANDATORY:支持當前事務,如果當前沒有事務,就拋出異常。
REQUIRES_NEW:新建事務,如果當前存在事務,把當前事務掛起。
NOT_SUPPORTED:以非事務方式執行操作,如果當前存在事務,就把當前事務掛起。
NEVER:以非事務方式執行,如果當前存在事務,則拋出異常。
NESTED:支持當前事務,如果當前事務存在,則執行一個嵌套事務,如果當前沒有事務,就新建一個事務。
參數二:事物超時設置: timeout
默認30秒
參數三:事務隔離級別:isolation
詳情如下:
Isolation.READ_UNCOMMITTED : 讀取未提交數據(會出現臟讀, 不可重復讀) 基本不使用
Isolation.READ_COMMITTED : 讀取已提交數據(會出現不可重復讀和幻讀)
Isolation.REPEATABLE_READ:可重復讀(會出現幻讀)
Isolation.SERIALIZABLE:串行化
備注:
MYSQL: 默認為REPEATABLE_READ級別
SQLSERVER: 默認為READ_COMMITTED
參數四: readOnly
屬性用於設置當前事務是否為只讀事務,設置為true表示只讀,false則表示可讀寫,默認值為false。
參數五:rollbackFor
該屬性用於設置需要進行回滾的異常類數組,當方法中拋出指定異常數組中的異常時,則進行事務回滾。例如:
指定單一異常類:@Transactional(rollbackFor=RuntimeException.class)
指定多個異常類:@Transactional(rollbackFor={RuntimeException.class, Exception.class})
參數六: rollbackForClassName
該屬性用於設置需要進行回滾的異常類名稱數組,當方法中拋出指定異常名稱數組中的異常時,則進行事務回滾。例如:
指定單一異常類名稱:@Transactional(rollbackForClassName="RuntimeException")
指定多個異常類名稱:@Transactional(rollbackForClassName={"RuntimeException","Exception"})
參數七:noRollbackForClassName
該屬性用於設置不需要進行回滾的異常類名稱數組,當方法中拋出指定異常名稱數組中的異常時,不進行事務回滾。例如:
指定單一異常類名稱:@Transactional(noRollbackForClassName="RuntimeException")
指定多個異常類名稱:
@Transactional(noRollbackForClassName={"RuntimeException","Exception"})
參數八:noRollbackFor
該屬性用於設置不需要進行回滾的異常類數組,當方法中拋出指定異常數組中的異常時,不進行事務回滾。例如:
指定單一異常類:@Transactional(noRollbackFor=RuntimeException.class)
指定多個異常類:@Transactional(noRollbackFor={RuntimeException.class, Exception.class})