@Tranaction
Spring中有聲明式事務和編程式事務,
加上了@Tranaction表示,把當前的事務管理交給Spring來管理,叫做聲明式事務
而程序員自己手動進行事務回滾(如AOP攔截異常進行事務回滾)
如下,是手動事務也就是編程式事務
//手動進行回滾
TransactionAspectSupport.currentTransactionStatus()
.setRollbackOnly();
我們有時候在代碼上看到
@Transactional(rollbackFor = Exception.class) 爲什麼後面要加 rollbackFor?
答:
因爲
@Transaction 時默認爲RuntimeException(也就是運行時異常)異常纔會回滾。
源碼上有明確的描述。
所以我們有時候出現其他檢查性異常的時候就不會進行回滾。
這個時候有兩種解決方案:
可以使用編程式事務,也就是手動事務,通過aop攔截,進行事務的回滾
//手動進行回滾
TransactionAspectSupport.currentTransactionStatus()
.setRollbackOnly();
2、在@Transaction加上rollbackFor=Exception.class,也就是所有的異常都會進行回滾。