在TransactionDefinition接口中定义
事务的7中传播特性
- PROPAGATION_REQUIRED
支持当前事务,如果当前没有事务,则新建一个事务,这是最常见的选择。 也就是说如果当前有事务,则加入到当前事务中,没有则新建事务执行。 - PROPAGATION_SUPPORTS
支持当前事务,如果当前没有事务,则以非事务的方式执行。 - PROPAGATION_MANDATORY
支持当前事务,如果当前没有事务,则抛出异常。 - PROPAGATION_REQUIRES_NEW
新建事务,如果当前存在事务,则将当前事务挂起。注意,这是启动一个新的,不依赖于环境的事务,这个事务将被完全的commited或rolled back而不依赖于其他外部事务,它拥有自己的隔离范围,锁等。当事务开启执行时,外部事务会被挂起,当它结束之后,外部事物才会被执行。
- PROPAGATION_NOT_SUPPORTED
以非事务方式提交,如果当前存在事务,就把当前事务挂起。 - PROPAGATION_NEVER
以非事务方式提交,如果当前存在事务,就抛出异常。 - PROPAGATION_NESTED
如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。
注意:它开始一个嵌套的事务,它是已经存在的事务的一个真正的子事务。嵌套事务开始执行时,将取得一个savepoint,如果这个嵌套事务失败,它将进行回滚到此savepoint。嵌套事务是外部事务的一部分,只有外部事务结束后它才会被提交。