1. 程式人生 > >spring 丟擲自定義異常報java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: Transaction rolled back

spring 丟擲自定義異常報java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: Transaction rolled back

介紹一下我報這個錯誤造成的原因:

    我啟用了aop全域性事務管理,但是我在業務程式碼中自定義了一個異常類繼承了Exception,當我需要在指定位置丟擲這個異常的時候,就會報:java.lang.RuntimeException: org.apache.cxf.interceptor.Fault: Transaction rolled back,這個異常

我在網上也找了很多種方法,但是都沒什麼用,比如:

<bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
> <property name="dataSource" ref="dataSource"/>
<property name="globalRollbackOnParticipationFailure" value="false" />
 </bean>

這種方法會導致事務無法回滾

首先,去除全域性事務管理(aop掃描路徑中不掃描我想自己手工註解事務的檔案目錄)

然後在需要事務管理的service介面實現方法上註解:

@Transactional(rollbackFor = {Exception.class, YrMallException.class})
YrMallException:自定義異常
Exception:異常父類
rollbackFor = {Exception.class, YrMallException.class}) -----如果丟擲裡面定義的異常,則事務回滾


這是我的解決方法,可能還有其他的,如果有了解的,歡迎評論