1、檢查方法是不是public的 (只能應用到 public 可見度的方法)
2、異常類型是不是unchecked異常
註解會對unchecked異常進行事務回滾;如果是checked異常則不回滾。
java裏面將派生於Error或者RuntimeException(比如空指針,1/0)的異常稱爲unchecked異常;
其他繼承自java.lang.Exception得異常統稱爲Checked Exception,如IOException、TimeoutException等
- Checked exception: 繼承自 Exception 類是 checked exception。代碼需要處理 API 拋出的 checked exception,要麼用 catch 語句,要麼直接用 throws 語句拋出去。
- Unchecked exception: 也稱 RuntimeException,它也是繼承自 Exception。但所有 RuntimeException 的子類都有個特點,就是代碼不需要處理它們的異常也能通過編譯,所以它們稱作 unchecked exception。RuntimeException(運行時異常)不需要try...catch...或throws 機制去處理的異常。
如果想check異常也想回滾怎麼辦,註解上面寫明異常類型即可
@Transactional(rollbackFor=Exception.class)
類似的還有norollbackFor,自定義不回滾的異常
3、數據庫引擎要支持事務,如果是MySQL,注意表要使用支持事務的引擎,比如innodb,如果是myisam,事務不起作用
4、是否開啓了對註解的解析
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
5、spring是否掃描到你這個包,如下是掃描到org.test下面的包
<context:component-scan base-package="org.test" ></context:component-scan>
6、檢查是不是同一個類中的方法調用(如a方法調用同一個類中的b方法)
7、異常是不是被你catch住了