項目上有個需求,先把表A的數據按要求備份到表B中,然後再把表A的備份數據刪掉。按照邏輯,在備份和刪除的過程中,出現任何異常都要回滾數據。於是在方法上加了@Transactional註解,認爲這樣,遇到異常就可以回滾了。自己在代碼中故意設置了一個異常,代碼如下圖:
結果測試的時候,發現數據並沒有回滾。
後來各種百度和請教,結果發現是自己加了try{}catch的原因導致的,自己捕獲了異常,事務就捕獲不到異常了,所以也就不會回滾了。
自己把try{}catch 刪掉之後,再進行測試,開始插入的數據就回滾了。