@Transactional注解
1.REQUIRED Spring默认的事务传播行为。支持事务。如果已经存在一个事务中,加入到该事务中。否则,新建一个事务。
特点:
a.外层事务提交了,内层才会提交。
b.内/外只要有报错,他俩会一起回滚。
c.只要内层方法报错抛出异常,即使外层有try-catch,该事务也会回滚!
d.因为内外层方法在同一个事务中,内层只要抛出了异常,这个事务就会被设置成rollback-only,即使外层try-catch内层的异常,该事务也会回滚。
2.REQUIRES_NEW 支持事务。每次都是创建一个新事物,如果当前已经在事务中了,会挂起当前事务。
特点:
a.内层事务结束,内层就提交了,不用等着外层一起提交。
b.外层报错回滚,不影响内层。
c.内层报错回滚,外层try-catch内层的异常,外层不会回滚。
d.内层报错回滚,然后又会抛出异常,外层如果没有捕获处理内层抛出来的这个异常,外层还是会回滚的。
3.SUPPORTS 支持事务。当前有事务就支持。当前没有事务就算了,不会开启一个事物。
4.MANDATORY 支持事务,如果业务方法执行时已经在一个事务中,则加入当前事务。否则抛出异常。
5.NESTED 支持事务。如果当前已经在一个事务中了,则嵌套在已有的事务中作为一个子事务。如果当前没在事务中则开启一个事务。
6.NOT_SUPPORTED
不支持事务,如果业务方法执行时已经在一个事务中,则挂起当前事务,等方法执行完毕后,事务恢复进行。
特点:
内层方法执行完毕之后直接提交,不用等外层提交
7.NEVER
不支持事务。如果当前已经在一个事务中了,抛出异常。
特点:
外层有事务直接报错,抛出异常