@transactional回滚,@Transactional spring事务回滚相关详解

KLQ 2020-07-23 10:23:37 java常见问答 5419

下面要给大家介绍的就是和@Transactional spring事务回滚相关的内容,下面就一起详细的了解一下吧。

/**
 * 用户登录接口
 * 
 * 
 * 1明确事务方法前的命名规则
 * 2保证事务方法执行的时间尽可能的短,不允许出现循环操作,不允许出现RPC等网络请求操作
 * 3不允许所有的方法都使用事务,节省服务器性能和缩短数据库连接时间
 * 4如果出现有多个地方需要事务回滚时,使用自定义或原有的异常进行抛出,异常必须继承RunTimeError,否则不会触发回滚操作
 * 5使用TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();进行手动回滚
 * 
 */
@Transactional
public UserModel login(UserModel user)
{
    UserModel userEntity = new UserModel();
    userEntity = userDao.login(user);
    if (userEntity == null)
    {
        return null;
    }
    userEntity = userDao.login(user);
    if (userEntity == null)
    {
        TransactionAspectSupport.currentTransactionStatus()
            .setRollbackOnly();
        return null;
    }
    else
    {
        return userEntity;
    }
}

上面只是一个例子,重点要看下面的内容。

大多数的时候,并不会去采用事务操作,可是,在一个服务层多次访问数据库,尤其是在进行插入删除操作时,就要使用事务进行操作,也就是说一个不成功,所有的操作全部回滚。

使用@Transactional注解,假如,第一次成功插入,第二次插入失败,执行TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();这条语句之后,第一次的插入动作就被回滚,也就是说,没有生效,手动回滚看起来要更加的实用一些。

之后,对于其他的一些抛出异常的自动回滚大家可以去参考一下网络上面的一些答案,这里就不详细的解释了。

下面再来补充几点:

使用Object savePoint = TransactionAspectSupport.currentTransactionStatus().createSavepoint();

设置回滚点,使用TransactionAspectSupport.currentTransactionStatus().rollbackToSavepoint(savePoint);回滚到savePoint。

@Transactional spring事务回滚相关内容你都清楚了吗?以上还只是一个比较简单的介绍呢,更多相关知识,可以继续通过本站的java架构师栏目的内容来进行了解哦。

推荐阅读:

@transactional注解的作用是什么?作用详解