今天在做自己的專案的時候,明明在配置檔案中配置了事務管理機制,然後想測試一下事務是否生效,一直不生效
後來發現原來是因為我自己定義的日誌切面把異常抓取了,但是沒有丟擲去
後來就把異常丟擲去就行了,最重要的是
切面裡面丟擲的異常必須是spring註解抓取的子類或者等於它,具體的看下**
@component
@aspect
public class loggingaop", arrays.aslist(proceedingjoinpoint.getargs()));
}object object = proceedingjoinpoint.proceed(proceedingjoinpoint.getargs());
//後置日誌
if(logignore == null || logignore != null && logignore.after()) ", object);
}}catch (throwable throwable) ", arrays.aslist(proceedingjoinpoint.getargs()));
/*** 如果用了事務,那麼異常要拋回給spring自身去處理
* 重要!!! -- 只能丟擲spring註解處理的異常的子類或本類,不能丟擲比它大的異常,否則spring就拿不到了
*/if(transactional != null)
}return false;
}}
因為我做這個切面的時候本身也是用的註解,所以便同時可以拿到spring上面的註解,如果有那個註解
把此時的異常丟擲去給spring註解即可
如果丟擲的異常大於spring的異常,那事務將不會被回滾,切記!!
Spring事務 異常
spring事務 異常 spring的事務實現採用基於aop的 來實現,如果沒有在事務配置的時候註明回滾的checked exception,那麼只有在發生了unchecked exception的時候,才會進行事務回滾。因此在dao層和service層,最好丟擲unckecked exceptio...
Spring 宣告式事務aop
我們故意在乙個方法裡先寫乙個插入,然後在寫乙個刪除語句。其中刪除語句的sql表達錯誤。雖然會報錯 告訴你刪除的sql語句錯誤,但是不會告訴你 插入操作成功了。也就是說 雖然程式因為錯誤沒有執行完,但是有一部分操作還是成功了。明顯不滿足我們的acid原則 原子性 一致性 隔離性 永續性 首先放上myb...
Spring 基於AOP的事務控制
事務是我們在進行資料操作的時候,要操作的事情,是乙個完整的單元,不可再分的。它包括幾個特性 原子性 一致性 可見性 隔離性 在spring容器中,事務是被封裝到事務管理器中,spring事務管理器的介面是org.springframework.transaction.platformtransact...