問題解決32:加上了@Transaction註解什麼時候纔會回滾?

@Tranaction

Spring中有聲明式事務和編程式事務,

加上了@Tranaction表示,把當前的事務管理交給Spring來管理,叫做聲明式事務

而程序員自己手動進行事務回滾(如AOP攔截異常進行事務回滾)
如下,是手動事務也就是編程式事務


//手動進行回滾
 TransactionAspectSupport.currentTransactionStatus()
 .setRollbackOnly();

我們有時候在代碼上看到

@Transactional(rollbackFor = Exception.class) 爲什麼後面要加 rollbackFor?
答:
因爲
在這裏插入圖片描述
@Transaction 時默認爲RuntimeException(也就是運行時異常)異常纔會回滾。

源碼上有明確的描述。

所以我們有時候出現其他檢查性異常的時候就不會進行回滾。

這個時候有兩種解決方案:
可以使用編程式事務,也就是手動事務,通過aop攔截,進行事務的回滾


//手動進行回滾
 TransactionAspectSupport.currentTransactionStatus()
 .setRollbackOnly();

2、在@Transaction加上rollbackFor=Exception.class,也就是所有的異常都會進行回滾。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章