spring中@Transactional註解丟擲異常不回滾的現象
阿新 • • 發佈:2019-01-30
文章轉載至:http://blog.csdn.net/qq_14874941/article/details/52808520
今天在開發中,遇到了如題這樣的問題,我自己手動丟擲異常,資料還是會寫入的資料庫中,並且不會發生回滾,導致產生了垃圾資料。後來上網查了一下,發現spring中,註解的事務回滾是預設RunTimeException才會回滾,如果丟擲的不是RunTimeException,spring是預設不會回滾的。 並且,你的程式中try catch了,哪怕是RunTimeException,也是不會回滾的。一定要丟擲異常,不知道這樣理解對不對。
那麼要怎麼辦呢?
這個是我們的業務異常。可以預見。BusinessException是繼承Exception的,RunTimeException也是繼承Exception的,所以這個BusinessException被丟擲是不會回滾的,因為它不是繼承RunTimeException。我在@Transactional做了一點小手腳,使其變成@Transactional(rollbackFor=Exception.class) 這個的意思是指定回滾的異常,我直接就指定了Exception。也就是隻要是Exception或者是Exception的子類,那麼在此方法中,都會進行回滾。當然,還有notRollbackFor,這個是指定異常不回滾。