目录
PROPAGATION_REQUIRED(默认)
方法A调用方法B,并且都声明了事务,那么方法B不会开启独立事务,而是将自己的操作放在方法A的事务中来执行,方法A和方法B任何一个报错都会导致整个事务回滚。
如果方法B没有开启事务,那就新开启一个事务,方法A和方法B任何一个报错都会导致整个事务回滚。
PROPAGATION_SUPPORTS
方法A调用方法B,如果方法A开启了事务,那么方法B就将自己加入到方法A中来执行;如果方法A没有开启事务,那么方法B自己也不开启事务。
PROPAGATION_MANDATORY
必须被一个开启了事务的方法来调用自己,否则报错,例如方法A调用方法B,方法A必须开启事务。
PROPAGATION_REQUIRES_NEW
方法A调用方法B,并且都声明了事务,方法A的事务会等方法B的事务完成后才会继续。也就是方法A报错,不会影响方法B;方法B报错,方法A可以选择回滚或者继续提交事务。
PROPAGATION_NOT_SUPPORTED
方法A调用方法B,方法A开启了事务,方法B不支持事务,方法A的事务执行到方法B的时候,方法A的事务会挂起,等方法B用非事务的方式运行结束再继续。
PROPAGATION_NEVER
不能被一个事务来调用,方法A调用方法B,方法A开启了事务,但是调用方法B会报错。
PROPAGATION_NESTED
嵌套事务,方法A调用方法B,并且都声明了事务,如果方法A回滚,那么方法B也一起回滚,这是和PROPAGATION_REQUIRES_NEW的区别;
但是方法B异常回滚,方法A可以catch其异常,这样只有方法B事务回滚,方法A事务不受影响,这是和PROPAGATION_REQUIRED的区别。