Spring默认有7种事务机制,如下:
REQUIRED-默认的事务隔离级别,会自动加入当前的事务,如果不存在则新建事务
SUPPORT级别,跟REQUIRED类似,也是会自动加入当前的事务,但两者区别在于,若当前无事务,则按照无事务的方式执行
MANDATORY级别,要求SQL操作强制在事务内部执行,如果当前不存在事务,则会抛出错误
REQUIRES_NEW-该级别同REQUIRES相似,唯一不同的是,它不会加入已有的事务,而是每次都把事务挂起,新建一个事务,等到事务执行完成了在恢复原有事务的执行
NOT_SUPPORTED-该级别默认不支持事务,如果当前调用者已经有事务了,那么此时会将事务挂起,待SQL执行完后,重新返回事务节点
NEVER-该级别标志着SQL语句绝不在事务中操作,若当前在事务中,则直接抛出异常,刚好同MANDATORY级别相对
NESTED-该级别同REQUIRES_NEW比较相似,都是会新起一个事务。然而不同点在于REQUIRES_NEW每次都创建新的独立的物理事务,而Nested只有一个物理事务;Nested嵌套事务回滚或提交不会导致外部事务回滚或提交,但外部事务回滚将导致嵌套事务回滚,而RequiresNew由于都是全新的事务,所以之间是无关联的。
我们项目中没有给出特定的配置,所以是默认的Required级别