Spring 声明式事务 事务功能实现

  • TransactionDefinition 事务的信息定义对象
  • 传播行为
  • 传播行为实现源码
  • MANDATORY
  • PROPAGATION_NEVER
  • PROPAGATION_NOT_SUPPORTED
  • PROPAGATION_REQUIRES_NEW
  • PROPAGATION_NESTED
  • TransactionStatus 提供事务具体的运行状态
  • PlatformTransactionManager Spring事务管理器,提供了常用的操作事务的方法

TransactionDefinition 事务的信息定义对象

封装了事务实现需要的隔离级别、传播行为、超时时间、只读

spring data neo4j事务问题_抛出异常


spring data neo4j事务问题_抛出异常_02

传播行为

事务传播行为类型

说明

PROPAGATION_REQUIRED

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

PROPAGATION_SUPPORTS

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

PROPAGATION_MANDATORY(mandatory 强制性的)

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

PROPAGATION_REQUIRES_NEW

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

PROPAGATION_NOT_SUPPORTED

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

PROPAGATION_NEVER

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

PROPAGATION_NESTED

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

传播行为实现源码

主要在AbstractPlatformTransactionManager

MANDATORY

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

当前没有事务时抛出异常

spring data neo4j事务问题_spring_03

PROPAGATION_NEVER

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

spring data neo4j事务问题_事务管理_04

PROPAGATION_NOT_SUPPORTED

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

spring data neo4j事务问题_抛出异常_05

PROPAGATION_REQUIRES_NEW

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

spring data neo4j事务问题_spring_06

PROPAGATION_NESTED

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

spring data neo4j事务问题_mybatis_07

TransactionStatus 提供事务具体的运行状态

spring data neo4j事务问题_spring_08


spring data neo4j事务问题_mybatis_09

PlatformTransactionManager Spring事务管理器,提供了常用的操作事务的方法

spring data neo4j事务问题_mybatis_10


spring data neo4j事务问题_java_11