关于spring注解事务传播机制的REQUIRED和REQUIRES_NEW

这是有注解REQUIRED的方法:

 @Transactional(propagation=Propagation.REQUIRES_NEW)
 public void  updateUserRequired(int sid) {
        User user = new User();
        User user1 = null;
        user1=getUserInfo("1", null);
        user.setID("1");
        user.setNAME("w`````````````e");
        user.setPASSWORD("32141221");
        user1=getUserInfo("1", null);
        System.out.println(user1.getID()+" "+user1.getNAME()+" "+user1.getPASSWORD());
        updateUser(user);    
        user1=getUserInfo("1", null);
        System.out.println(user1.getID()+" "+user1.getNAME()+" "+user1.getPASSWORD());
            requiredService.updateTeaRequired_new();
       // throw new RuntimeException();
    }
这是有注解REQUIRES_NEW的方法:
    @Transactional(propagation=Propagation.REQUIRES_NEW)
    public void updateTeaRequired_new(){
        // TODO Auto-generated method stub
        userDao.updateTea(setTeacher());
        throw new RuntimeException();   
    }

如果REQUIRED的方法抛出runtime异常,REQUIRES_NEW不抛出异常,则REQUIRES_NEW提交,REQUIRED回滚。
但是反过来的话却是整体都回滚,这是为什么

1个回答

REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择(如果updateTeaRequired_new出现异常时,会抛出异常信息到updateUserRequired方法里面.)。
REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。(新开启一个事物,执行完updateTeaRequired_new方法后就提交了.)

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问