Spring事务的传播行为

 

所谓事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。

Spring 默认的事务传播行为是 PROPAGATION_REQUIRED

Spring 支持 7 种事务传播行为

  • PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

  • PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。

  • PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。

  • PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。

  • PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

  • PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。

  • PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。

==============================================================

 

 

@Transactional(propagation=Propagation.REQUIRED)
   
public void saveUser(){
        //1
、保存用户--日志的保存不影响主流程
       User user=new User();
        userDao.save(user);
        //2
、记录日志----- 方法一:用try
        try {
            UserLog userLog = new UserLog();
            userLogDao.save(userLog);
        }catch(Exception e){

        }
        //2
、记录日志----- 方法二:开启新的事务
        saveUserLog();
    }
    @Transactional(propagation=Propagation.REQUIRES_NEW)
    public void  saveUserLog() {
        UserLog userLog = new UserLog();
        userLogDao.save(userLog);
    }
}

总结:第二个保存日志的执行不影响主流程saveUser的执行,用try和开启新事务的区别???

 

 

 

你可能感兴趣的:(Spring事务的传播行为)