Spring事务传播机制说简单点就是两个(当然可以是多个)方法上的事务之间(非平行关系,包含与被包含的关系)如何相互起作用,有以下几种情形(假如方法A和B,A调用 B):
PROPAGATION_REQUIRED:A上有事务,B加入A的事务中,A没有事务,B就自己建一个事务。
PROPAGATION_SUPPORTS:A上有事务,B加入A的事务; A没有事务,B也就没有事务。也就是说B的事务触发条件是必须被包含在一个事务中。
PROPAGATION_MANDATORY:A上有事务,B加入A的事务;A上没有事务,B抛出异常。也就是说B必须被包含在事务中。
PROPAGATION_REQUIRES_NEW:A上有事务,B不加入而是挂起A的事务,新建一个自己的事务,执行完后再继续A的事务。
PROPAGATION_NOT_SUPPORTED:A上有事务,会挂起A的事务,以非事务的方式执行B。这样A回滚也不会影响B。
PROPAGATION_NEVER:A上有事务B抛出异常,也就是说B必须以非事务的方式执行,且不能被包含在事务中。
PROPAGATION_NESTED:A有事务,则以嵌套事务执行。如果没有事务则新建自己的事务。至于嵌套事务与加入A事务区别,可以百度下。
注意:加入A事务,新建自己的事务挂起A事务和嵌套到A事务中各种情况的区别。
展开
评论