首先:
Spring的事务,也就是数据库的事务操作,符合ACID标准,也具有标准的事务隔离级别。
但是Spring事务有自己的特点,也就是事务传播机制。
所谓事务传播机制,也就是在事务在多个方法的调用中是如何传递的,是重新创建事务还是使用父方法的事务?父方法的回滚对子方法的事务是否有影响?这些都是可以通过事务传播机制来决定的。简单来说就是回滚机制。
1.REQUIRED (必须的)
如果有事务则加入事务,如果没有事务,则创建一个新的(默认值)
2.NOT_SUPPORTED(不支持)
Spring不为当前方法开启事务,相当于没有事务
3.REQUIRES_NEW(需要新的事务)
不管是否存在事务,都创建一个新的事务,原来的方法挂起,新的方法执行完毕后,继续执行老的事务
4.MANDATORY(强制性的)
必须在一个已有的事务中执行,否则报错
5.NEVER(从不)
必须在一个没有的事务中执行,否则报错
6.SUPPORTS(支架)
如果其他bean调用这个方法时,其他bean声明了事务,则就用这个事务,如果没有声明事务,那就不用事务
7NESTED(嵌套的)
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与REQUIRED类似的操作
required是必须的没有事务则创建事务
以上就是所有事务
注意事项
前提:保存方法中调用删除方法
1)REQUIRED
当两个方法的传播机制都是REQUIRED时,如果一旦发生回滚,两个方法都会回滚
2)REQUIRES_NEW
当删除方法传播机制为REQUIRES_NEW,会开启一个新的事务,并单独提交方法,所以保存方法的回滚并不影响delete方法事务提交
3)NESTED
当保存方法为REQUIRED,删除方法为NESTED时,删除方法开启一个嵌套事务;
当保存方法回滚时,删除方法也会回滚;反之,如果删除方法回滚,则并不影响保存方法的提交