Spring从REQUIRED_NEW方法调用REQUIRED方法

时间:2015-04-24 07:17:05

标签: java spring hibernate transactions spring-transactions

我的bean条目如下

<bean id="inspectReqImpl"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager" ref="transactionManager" />
        <property name="transactionAttributes">
            <props>
                <prop key="activateRequest">PROPAGATION_REQUIRES_NEW</prop>                             
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
        <property name="target">
            <bean
                class="com.test.InspectRequestImpl">                
            </bean>
        </property>
</bean>

<bean id="inspectReqProcess"
        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager" ref="transactionManager" />
        <property name="transactionAttributes">
            <props>             
                <prop key="*">PROPAGATION_REQUIRED</prop>
            </props>
        </property>
        <property name="target">
            <bean
                class="com.test.InspectRequestProcessImpl">             
            </bean>
        </property>
</bean>

当我调用com.test.InspectRequestImpl.activateRequest()方法然后Spring将创建新的事务

public void activateRequest()
{

Calling method of InspectRequestProcessImpl(ex: processRequest())
For InspectRequestProcessImpl we have defined all methods as PROPAGATION_REQUIRED

}

因此,如果事件传播为(InspectRequestProcessImpl.processRequest())的方法REQUIRED中出现任何异常(已检查或未选中),那么对具有事务传播InspectRequestImpl.activateRequest()的{​​{1}}将产生什么影响}

  • 在这种情况下春天的表现如何。它会提交REQUIRED_NEW还是回滚?
  • 它会回滚InspectRequestImpl.activateRequest()的内容还是会引发异常?

1 个答案:

答案 0 :(得分:1)

默认行为是在经过检查的异常之后提交,在未经检查的异常之后回滚。

如果您希望在检查异常后执行回滚,请在事务规范中添加回滚规则。 对于一般异常使用“PROPAGATION_REQUIRED,-Exception”或对特定异常使用“PROPAGATION_REQUIRED,-MyException”。

如果您的方法声明抛出异常,则抛出异常,否则不会抛出异常。 Spring不会传播异常......您可以尝试/捕获异常并且不执行任何操作。