required(默认):支持使用当前事务,如果当前事务不存在,创建一个新的事务
supports:支持使用当前事务,如果事务不存在,则不使用事务
mandatory:强制事务,支持使用当前事务,如果当前事务不存在,则抛出exception
requires_new:创建一个新事务,如果当前事务存在,把当前事务挂起
not_supported:无事务执行,如果当前事务存在,把当前事务挂起
never:无事务执行,如果当前有事务则抛出exception
nested:嵌套事务,如果当前事务存在,那么在嵌套的事务中执行,如果当前事务不存在,则表现和required一样
这七中传播特性基本可以分为三类:
1坚决不要事务的
never:没有事务正常执行,有事务就抛出异常
not_supported:没有事务正常执行,有事务也不用
2.可有可无的
supports:有事务就用,没有事务就不用
3.必须有事务的
required:默认的,有事务就用,没有就创建一个新的事务
requires_new:都会创建一个新的事务,A方法调用B方法,A执行出错,B不会回滚
nested:嵌套事务,A方法调用B方法,A方法会和B的事务关联起来
mandatory:如果当前事务不存在,会抛出异常
使用限制,
对私有方法不起作用,只对公有方法生效
同一个类中调用方法不会开启新事务,因为走的是内部调用,不是aop
即AB两个方法在一个Java中,直接调用不起作用,可以先自己注入自己,再调用
supports方式和readOnly同时用,readOnly无效