1. 程式人生 > >關於Spring註解式事務@Transactional的簡單描述

關於Spring註解式事務@Transactional的簡單描述

一、背景:

目前很多專案的事務處理都是利用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>