事務的傳播特性與理解

事務的傳播特性與理解

原文地址

事務的傳播在Spring註解中使用@Transactional(propagation=Propagation.REQUIRED)來配置。

事務的傳播類型

1. REQUIRED 默認值

如果已經存在事務,則加入此事務中執行;如果不存在事務,則新建事務執行。
一般使用此模式就能滿足絕大多數業務邏輯。

2. SUPPORTS

如果當前存在事務,則加入此事務中執行;如果當前不存在事務,則以非事務方式執行。

3. NOT_SUPPORTED

始終以非事務方式執行;如果當前存在事務,則掛起事務。

4. REQUIRES_NEW

始終在新事務中執行;如果當前存在事務,則新建事務執行。

5. NEVER

以非事務方式執行;如果當前存在事務,則拋出異常。

6. MANDATORY

始終以事務方式執行;如果當前不存在事務,則拋出異常。

事務傳播特性示例中理解

1. 使用NOT_SUPPORTED

如果我們在一個事務方法中需要記錄操作日誌,這個時候我們就可以把日誌記錄方法設置爲NOT_SUPPORTED

@Transactional(propagation=Propagation.NOT_SUPPORTED)
public void saveLog() {
    // ...
}

@Transactional(propagation=Propagation.REQUIRED)
public void dealTransactional() {
    saveLog();
    // xxx
}
2. 使用REQUIRES_NEW

如果我們在一個事務方法中需要執行另一個事務方法,並且不想另一個事務方法導致的回滾影響本事務方法,這個時候就適合使用REQUIRES_NEW

@Transactional(propagation=Propagation.REQUIRES_NEW)
public void otherTransactional() {
    // ...
}

@Transactional(propagation=Propagation.REQUIRED)
public void dealTransactional() {
    // xxx
    otherTransactional();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章