spring事务的传播机制

七个事务传播机制如下:

传播机制 详解
REQUIRED(TransactionDefinition.PROPAGATION_REQUIRED) 支持当前事务,如果没有事务会创建一个新的事务
SUPPORTS(TransactionDefinition.PROPAGATION_SUPPORTS) 支持当前事务,如果没有事务的话以非事务方式执行
MANDATORY(TransactionDefinition.PROPAGATION_MANDATORY) 支持当前事务,如果没有事务抛出异常
REQUIRES_NEW(TransactionDefinition.PROPAGATION_REQUIRES_NEW) 表示当前方法必须运行在自己的事务中,创建一个新的事务并挂起当前事务
NOT_SUPPORTED(TransactionDefinition.PROPAGATION_NOT_SUPPORTED) 以非事务方式执行,如果当前存在事务则将当前事务挂起
NEVER(TransactionDefinition.PROPAGATION_NEVER) 以非事务方式进行,如果存在事务则抛出异常
NESTED(TransactionDefinition.PROPAGATION_NESTED) 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

Spring的API设计很不错,基本上根据英文翻译就能知道作用:

Required:必须的。说明必须要有事物,没有就新建事物。

supports:支持。说明仅仅是支持事务,没有事务就非事务方式执行。

mandatory:强制的。说明一定要有事务,没有事务就抛出异常。

required_new:必须新建事物。如果当前存在事物就挂起。

not_supported:不支持事物,如果存在事物就挂起。

never:绝不有事务。如果存在事物就抛出异常.

nested:嵌套的,存在事务,则在嵌套事务中执行,不存在就创建新事务(不存在时,与REQUIRED类似)。

hey!baby,站住,点它!