關於Spring註解式事務@Transactional的簡單描述
阿新 • • 發佈:2019-01-07
一、背景:
目前很多專案的事務處理都是利用Spring的註解式事務實現的(@Transactional)。
- 在測試事務回滾的過程中發現如下現象:
throw new RuntimeException("xxxxxxxxxxxx"); 事務回滾
throw new Exception("xxxxxxxxxxxx"); 事務沒有回滾
二、關於spring事務使用說明:
基於Spring AOP的事務管理,即宣告式事務管理,預設是針對RuntimeException回滾,既預設只對RuntimeException()及其子類進行事務回滾;非執行時型別的異常預設是不會回滾的。
三、依賴事務管理的業務程式碼中出現異常該如何處理?
1、針對該業務程式碼進行封裝,二次丟擲RuntimeException型別的異常;
2、利用硬編碼的方式,藉助spring api對事務進行顯式的回滾;
3、在spring配置檔案中對rollback-for屬性賦值。Tip:該配置也可以直接加在註解上。
<tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes> <tx:method name="*" rollback-for="com.wangcw.exception.XyzException"/> </tx:attributes> </tx:advice>
同時,Spring配置檔案中也可以宣告出不進行回滾的異常。
<tx:advice id="txAdvice">
<tx:attributes>
<tx:method name="update*" no-rollback-for="IOException"/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>