spring 事务管理 2(spring的事务方法镶嵌使用,事务边界和传播性)没完

风流意气都作罢 提交于 2019-11-29 08:08:53

 许多人认为spring一个事务方法不应该调用另一个事务方法,否则将产生两个事务,其实是没有正确理解spring的事务传播性和边界

Spring 对事务控制的支持统一在 org.springframework.transaction.TransactionDefinition 类中描述,
该类有以下几个重要的接口方法:

int getPropagationBehavior():事务的传播行为

int getIsolationLevel():事务的隔离级别

int getTimeout():事务的过期时间

boolean isReadOnly():事务的读写特性。

所谓事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。Spring 支持 7 种事务传播行为:

PROPAGATION_REQUIRED 如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。

PROPAGATION_SUPPORTS 支持当前事务,如果当前没有事务,就以非事务方式执行。

PROPAGATION_MANDATORY 使用当前的事务,如果当前没有事务,就抛出异常。

PROPAGATION_REQUIRES_NEW 新建事务,如果当前存在事务,把当前事务挂起。

PROPAGATION_NOT_SUPPORTED 以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。

PROPAGATION_NEVER 以非事务方式执行,如果当前存在事务,则抛出异常。

PROPAGATION_NESTED 如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与 PROPAGATION_REQUIRED 类似的操作。

下面简要介绍下事务的边界

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!