关于Spring声明性事务的几种定义方式

PROPAGATION_REQUIRED — 支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS — 支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY — 支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW — 新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED — 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER — 以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED — 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则进行与PROPAGATION_REQUIRED类似的操作。

对照一下,自己以前的理解确实有错误,结果就是单独定义几个没有事务的Service,调用的时候需要嵌入到其他Service方法中,认为这样才能能保证两个Service方法在一个事务里面执行。实际上声明为PROPAGATION_REQUIRED就可以了。

详细的说明请参见下面的文章:解惑Spring嵌套事务

Comments are closed.