Spring的事务传播: 当不同的事务方法进行相互调用时,spring是如何进行传播的,spring定义了7种传播特性来保证事务的正常执行:
假定 A类有一个方法a a方法中调用了 B类中的b方法。
1.REQUIRED: b方法在执行的时候 如果a方法有事务,则b按照a方法的事务执行,如果a方法没有事务,b方法新建一个事务
2.Support: b方法在执行的时候 如果a方法有事务,则b按照a方法的事务执行,如果a方法没有事务,b方法则按无事务执行。
3.REQUIRED_NEW,b方法在执行的时候会创建一个新的事务,如果a方法存在事务,则挂起这个事务
4.MANDATORY:b方法在执行的时候如果a存在事务,则加入事务,如果不存在事务则报异常
5.Never:不使用事务,如果a方法有事务,则报异常
6.Nested:嵌套事务,如果a方法有事务则在嵌套事务中执行,如果a方法没有事务则新建一个事务
7.NOT_SUPPORT:b方法在执行的时候 如果a方法有事务,则将事务挂起,b方法则按无事务执行。
nested与required的区别:required模式,b因报错发生回滚,则a也需要回滚,因为ab用的是同一个事务
nested模式:b发生回滚,a方法不需要回滚
nested与required_new的区别: a方法回滚的时候,nested模式下 b方法也要回滚,因为嵌套下,父事务回滚,子事务必回滚
required_new模式父事务回滚,子事务不用回滚 因为开启了新的事务