spring手動回滾事務
阿新 • • 發佈:2021-01-20
1.在開發中通過@Transaction註解進行事務控制,如果當前方法丟擲異常則自動回滾事務
@Transactional
public void addBook(Book book){
......
//資料庫操作
bookDao.save(book);
//此處丟擲異常則本方法的資料庫操作全部回滾
shopDao.update(book);
......
}
2.如果方法中人為捕獲了異常並且沒有丟擲異常則spring不會自動回滾
@Transactional public void addBook(Book book){ ...... //資料庫操作 try{ bookDao.save(book); //此處丟擲異常則上面的資料庫操作不會回滾 shopDao.update(book); }catch(Exception e){ log.error("這裡出異常了") } ...... }
此種情況下如果想要回滾事務可以使用手動回滾的方式:
@Transactional public void addBook(Book book){ ...... //資料庫操作 try{ bookDao.save(book); //此處丟擲異常則上面的資料庫操作不會回滾 shopDao.update(book); }catch(Exception e){ log.error("這裡出異常了"); //手工控制資料庫事務回滾 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); } ...... }