Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring事务在类到类级别和方法到方法级别上的传播_Spring_Transactions_Spring Transactions_Propagation - Fatal编程技术网

Spring事务在类到类级别和方法到方法级别上的传播

Spring事务在类到类级别和方法到方法级别上的传播,spring,transactions,spring-transactions,propagation,Spring,Transactions,Spring Transactions,Propagation,Spring事务传播如何为需要的传播和需要的新传播工作 请提供有关类到类级别和方法到方法级别的传播的信息 我还需要知道如何初始化/启动这些事务,并在当前事务完成时恢复以前的事务,以便进行传播 在需要传播和需要新传播的情况下使用单个事务时,事务将如何决定何时需要提交/回滚?希望此信息有助于了解spring tx传播的一些基本功能和流程 这是一些关于传播的基本信息,您也可以从一些著名的资源中找到,但需要先放在这里,了解一些关于Spring传播的基本知识: 传播是指决定如何在逻辑或物理事务中封装业务方

Spring事务传播如何为需要的传播和需要的新传播工作

请提供有关类到类级别和方法到方法级别的传播的信息

我还需要知道如何初始化/启动这些事务,并在当前事务完成时恢复以前的事务,以便进行传播


在需要传播和需要新传播的情况下使用单个事务时,事务将如何决定何时需要提交/回滚?

希望此信息有助于了解spring tx传播的一些基本功能和流程

这是一些关于传播的基本信息,您也可以从一些著名的资源中找到,但需要先放在这里,了解一些关于Spring传播的基本知识:

传播是指决定如何在逻辑或物理事务中封装业务方法的能力

REQUIRED行为意味着,如果当前bean方法执行上下文中存在已打开的事务,则将使用相同的事务,如果不存在,则创建新事务

需要_NEW行为意味着容器将始终创建新的物理事务

嵌套的行为使嵌套的Spring事务使用相同的物理事务,但在嵌套调用之间设置保存点,因此内部事务也可以独立于外部事务回滚

强制的行为表明,现有的已打开交易必须已经存在。如果不是,容器将引发异常

从不行为表明,现有的已打开交易必须不存在。如果事务存在,容器将引发异常

不支持的行为将在任何事务范围之外执行。如果已打开的事务已存在,则将暂停该事务

如果已打开的事务已经存在,支持行为将在事务范围内执行。如果没有已打开的事务,该方法将以非事务方式执行

====================================

有些人还怀疑,如果我们提供Tx传播(例如,REQUIRES\u NEW),从同一类中的一个方法调用不同的方法会发生什么情况:

<bean id="class2" parent="yourSpringAOPInterceptor">
    <property name="target">
        <bean   class="Class2">
            <property name="prop1" ref="prop1" />
        </bean>
    </property>
    <property name="transactionAttributes">
        <props>
            <prop key="*">PROPAGATION_REQUIRED</prop>
            <prop key="methodABC">PROPAGATION_REQUIRES_NEW</prop>
        </props>
    </property>
</bean>
没有

当方法调用在同一类中从一个方法到另一个方法时,它不会创建新事务。它将使用相同的事务。此传播仅适用于来自不同类的方法调用

示例:

<bean id="class2" parent="yourSpringAOPInterceptor">
    <property name="target">
        <bean   class="Class2">
            <property name="prop1" ref="prop1" />
        </bean>
    </property>
    <property name="transactionAttributes">
        <props>
            <prop key="*">PROPAGATION_REQUIRED</prop>
            <prop key="methodABC">PROPAGATION_REQUIRES_NEW</prop>
        </props>
    </property>
</bean>

需要进行传播
传播需要新的
Class2具有以下方法结构:

  • methodPQR()
  • 方法ABC()

    1) 当从类2外部调用methodPQR()时 此方法使用外部调用方的相同事务

    2) 当从类2外部调用methodABC()时 此方法创建新事务,但不使用相同的事务 外部调用方的事务

    3) 当methodPQR()调用同一类的methodABC()时,则调用methodABC() 不创建新事务并使用相同的事务 methodPQR()

详情请参阅:

======================================

下图将帮助您了解这些内容:

<bean id="class2" parent="yourSpringAOPInterceptor">
    <property name="target">
        <bean   class="Class2">
            <property name="prop1" ref="prop1" />
        </bean>
    </property>
    <property name="transactionAttributes">
        <props>
            <prop key="*">PROPAGATION_REQUIRED</prop>
            <prop key="methodABC">PROPAGATION_REQUIRES_NEW</prop>
        </props>
    </property>
</bean>
  • 当第二个事务开始时,当前正在运行的事务会发生什么情况 第一笔交易

  • 所有方法使用相同事务时提交更改的方式。 最内部的方法会提交所有更改还是最外部的方法 方法

  • 如果第二个事务得到任何异常,会发生什么?应该吗 只回滚第二个事务,还是应该回滚第一个和第二个事务 第二,两项交易?同样,如果第一个事务得到任何 异常,它将仅回滚第一个事务或 由第二个(新的内部)事务提交的更改?-春天怎么样 决定这个

  • 当第二个事务完成时,第一个事务如何恢复

谢谢你的阅读。如果发现任何错误或更多信息,请发表评论。