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();
    }
    ......
}
原文地址:https://www.cnblogs.com/bcde/p/14303147.html