事务方法被另一个事务方法调用时,必须指定事务应该如何传播。
spring中的事务传播行为可以由传播属性指定。spring指定了7种传播行为。
REQUIRED(必须添加事务) | 如果有事务在运行,当前的方法就在这个事务内运行,否则就开启一个新的事务,并在自己的事务内运行,默认传播行为 |
REQUIRES_NEW(必须添加新事务) | 当前方法必须启动新事务,并在自己的事务内运行,如果有事务正在运行,则将它挂起 |
SUPPORTS(事务支持的) | 如果有事务在运行,当前的方法就在这个事务内运行,否则可以不运行在事务中 |
NOT_SUPPORTED(事务不支持的) | 表示该方法不应该运行在事务中。如果存在当前事务,在该方法运行期间,当前事务将被挂起。如果使用JTATransactionManager的话,则需要访问TransactionManager |
MANDATORY(事务强制性的) | 当前的方法必须运行在事务内部,如果没有正在运行的事务,就会抛出异常 |
NEVER(从未有事务的) | 当前方法不应该运行在事务中,如果有运行的事务,就抛出异常 |
NESTED(嵌套的) | 如果有事务在运行,当前的方法就应该在这个事务的嵌套事务内运行。嵌套的事务可以独立于当前事务进行单独地提交或回滚。如果当前事务不存在,那么其行为与PROPAGATION_REQUIRED一样。 |