spring切面執(zhí)行順序-事務(wù)切面注意點

1 Spring里面,如果一個方法,存在多個切面,是按照切面的Order順序來執(zhí)行的:Order值越小,那么切面越先執(zhí)行(越后結(jié)束).

2 @Transactional的Order值是Integer.MAX_VALUE.

3 如果不指定Order,那么Order是默認(rèn)值->Integer.MAX_VALUE. 如果Order相同,則是按照切面字母的順序來執(zhí)行切面.

比如@Transactional和@Cacheable->對應(yīng)的切面是TransactionInterceptor和CacheInterceptor,則先執(zhí)行@Cacheable的切面.

4 一般將事務(wù)切面放到最貼近方法的那一層,即事務(wù)最后執(zhí)行(最先結(jié)束),避免其他切面吃掉原本方法的異常,導(dǎo)致事務(wù)執(zhí)行結(jié)果不符合預(yù)期.

5 事務(wù)的傳遞分為單機項目和微服務(wù)項目.

單機項目,A方法有事務(wù),A調(diào)用B方法,B方法加不加注解,都會在A的事務(wù)里.

如果A方法沒事務(wù),B方法有事務(wù),分兩種情況,在同一個類,B事務(wù)不生效,在不同的類B事務(wù)生效,A無事務(wù);

微服務(wù)項目,事務(wù)無法傳遞,只能在異常情況,進行代碼異常回滾,盡可能保持事務(wù)一致.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容