當@Transactional不起作用如何排查問題。
可以按照以下幾個步驟逐一確認:
1、首先要看數據庫本身對應的庫、表所設置的引擎是什麼。MyIsam不支持事務,如果需要,則必須改爲InnnoDB。
2、@Transactional所註解的方法是否爲public
3、@Transactional所註解的方法所在的類,是否已經被註解@Service或@Component等。
4、需要調用該方法,且需要支持事務特性的調用方是在在 @Transactional所在的類的外面。注意:類內部的其他方法調用這個註解了@Transactional的方法,事務是不會起作用的。
5、註解爲事務範圍的方法中,事務的回滾僅僅對於unchecked的異常有效。對於checked異常無效。也就是說事務回滾僅僅發生在出現RuntimeException或Error的時候。
如果希望一般的異常也能觸發事務回滾,需要在註解了@Transactional的方法上,將@Transactional回滾參數設爲:
@Transactional(rollbackFor=Exception.class)
文章參考:https://blog.csdn.net/Z__Sheng/article/details/89489053