場景:springboot專案中,service層@transactional(預設傳遞方式)註解不同service的多個方法,實現在底層方法手動丟擲異常實現多個方法事務的同步。
偽**:
@transactional
void methoda(dataa)
@transactional
void mehtodb(datab)else
}class myexception extends exception
}
執行結果:
多次測試,結果methoda始終無法回滾。
解決辦法:
反思:spring原始碼有必要深入研究研究。
後續跟進:
2019.11.20
也可以手動設定回滾的規則,示例如下:
@transactional(norollbackfor = myexception.class)//丟擲指定異常不回滾
@transactional(rollbackfor = myexception.class)//丟擲指定異常回滾
spring預設事務異常處理
spring宣告式事務管理預設對非檢查型異常和執行時異常進行事務回滾,而對檢查型異常則不進行回滾操作。那麼什麼是檢查型異常什麼又是非檢查型異常呢?1 繼承自runtimeexception或error的是非檢查型異常 2 繼承自exception的則是檢查型異常 runtimeexception本身...
資料庫事務的隔離以及spring的事務傳播機制
資料庫的事務隔離 mysql innodb事務的隔離級別有四級,預設是 可重複讀 rr repeatable read oracle預設的是提交讀。rc 四個級別逐漸增強,每個級別解決乙個問題。spring的事務傳播機制 spring在transactiondefinition介面中規定了7種型別的...
spring 五個事務隔離級別和七個事務傳播行為
spring 在transactiondefinition介面中定義了五個不同的事務隔離級別 isolation default這是乙個platfromtransactionmanager預設的隔離級別,使用資料庫預設的事務隔離級別.另外四個與jdbc的隔離級別相對應 isolation read ...