简述:
spring的事务传播(transaction propagation)分为
REQUIRED
SUPPORTED
NOT_SUPPORTED
REQUIRES_NEW
MANDATORY
NEVER
NESTED
PROPAGATION_NESTED
如图所示
下面简述一下文档上的说明,
1. REQUIRED
如果当前事务上下文中存在事务,则使用当前事务,否则新建一个事务
2. SUPPORTED
如果当前事务上下文中有一个事务,那么使用上下文中的事务;如果没有,那么按照没有事务的方式执行
3. NOT_SUPPORTED
无论当前事务上下文中有没有事务,都会按照无事务的方式执行
4. REQUIRES_NEW
无论当前事务上下文中有没有事务,都会开启一个新的事务
事务间没有依赖关系,四种情况都有可能出现
A成功B失败,A失败B成功,A成功B失败,A失败B失败
5. MANDATORY
如果当前事务上下文中有一个事务,那么使用事务上下文中的事务;如果没有, 那么抛出一个IllegalTransactionStatException
6. NEVER
如果当前事务上下文中有一个事务,就会抛出IllegalTransactionStatException
7. NESTED
在当前事务上下文的事务中增加一个保存点,如果内嵌事务发生回滚,只会回滚内嵌事务,不会回滚外层事务
与REQUIRES_NEW的区别是,
内嵌事务信赖A, 不可能出现A失败B成功