spring里使用注解@Transactional声明事务时: ----------------------------------------- 你的代码, 发生Error当然回滚, 抛出RuntimeException也回滚, 抛出unchecked exceptions也回滚, 抛出Checked exceptions则不回滚!!!! ----------------------------------------- 记住,是抛出了异常,要是代码里直接try,catch住了,那自然就没抛出来,根本不会回滚, 所以,不要瞎写什么try catch了。 -------------------------------------------- rollbackFor用于指定何种Checked exceptions发生时,进行回滚。
@Transactional (rollbackFor = BaseBusinessException.class) public void addAndDeleteUser(String username, int id) throws BaseBusinessException{ userMapper.addUser(username); this.m1(); userMapper.deleteUserById(id); } private void m1() throws BaseBusinessException { throw new BaseBusinessException("xxx"); }
addAndDeleteUser抛出了业务异常,属于Checked exception,不配置rollbackFor的话,不会回滚。 rollbackFor里指定了该业务异常,则进行回滚。 -------------------------------------------- 只有方法throws了异常,希望该异常回滚时,才需要使用rollbackFor属性。
@Transactional (rollbackFor=Exception.class) public void addAndDeleteUser2(String username, int id){ userMapper.addUser(username); userMapper.deleteUserById(id); }
这个rollbackFor用的纯属多余,因为根本没throws异常。
|