springboot 中使用事務

直接在service 層的方法上加上@Transactional 註解就ok。html

注意事項:java

一、Spring 基於註解的聲明式事物 @Transactional 默認狀況下只會對運行期異常(java.lang.RuntimeException及其子類)和 Error 進行回滾。spring

二、數據庫引擎要支持事物,使用InnoDB。數據庫

三、@Transactional 只能被應用到public方法上, 對於其它非public的方法,若是標記了@Transactional也不會報錯,但方法沒有事務功能.springboot

四、看到網上好多人說要在啓動類(配置類)上加  @EnableTransactionManagement 來開啓事務支持。oop

通過測試並不須要。測試

 

spring aop  異常捕獲原理:spa

被攔截的方法需顯式拋出異常,並不能經任何處理,這樣aop代理才能捕獲到方法的異常,才能進行回滾,默認狀況下aop只捕獲 RuntimeException 的異常,但能夠經過配置來捕獲特定的異常並回滾  .net

換句話說在service的方法中不使用try catch 或者在catch中最後加上throw new runtimeexcetpion(),這樣程序異常時才能被aop捕獲進而回滾代理

 

想要不向上拋異常,也就是在service就捕獲異常,並且註解還生效的方法:

在service層方法的catch語句中增長:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();語句,手動回滾,這樣上層就無需去處理異常

 

要是你對於事物的基礎知識不太清楚,或想了解Spring使用事物的幾種方式能夠參考個人有道雲筆記:

Spring事務管理

 

參考:springBoot service 事務註解@Transactional不起做用的解決

       :Spring中@Transactional事務回滾(含實例詳細講解,附源碼)

       : Spring Boot 事務的使用

       :Spring Boot中的事務管理

       :第六章 springboot + 事務

相關文章
相關標籤/搜索