1. 程式人生 > 實用技巧 >spring手動回滾事務

spring手動回滾事務

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();
    }
    ......
}