0

我有两个类,ServiceA 和 ServiceB,它们都有调用数据库的方法

在 ServiceA 我有以下代码

public void updateData() {
//some database updates
serviceB.addDetails();
//some more database updates
}

这是我在两个类的 applicationContext 中的配置

<bean id="serviceATarget" class="com.company.service.ServiceA">
    <property name="serviceB" ref="serviceB" />
    <property name="serviceADAO" ref="serviceADAO" />
</bean>
<bean id="serviceA" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager" ref="transactionManager" />
    <property name="target" ref="serviceATarget" />
    <property name="transactionAttributes">
    <props>
        <prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
    </props>
</property>
</bean>

<bean id="serviceBTarget" class="com.company.service.serviceB">
    <property name="serviceBDAO" ref="serviceBDAO" />
</bean>

<bean id="serviceB" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager" ref="transactionManager" />
    <property name="target" ref="serviceBTarget" />
    <property name="transactionAttributes">
    <props>
    <prop key="add*">PROPAGATION_REQUIRED,-Exception</prop>
    </props>
    </property>
</bean>

问题是在 ServiceA 中,如果在“//一些更多的数据库更新”部分之后发生异常,则所做的更新serviceB.addDetails()不会被回滚。

帮助将不胜感激。谢谢。

4

1 回答 1

-1

您可能想要使用注释(它更容易)

“Spring 2.0 及以上版本中的声明式事务配置与之前的 Spring 版本有很大不同。主要区别在于不再需要配置 TransactionProxyFactoryBean bean。”

您喜欢服务 A 调用服务 B 并使用 @Transactional Propagation.REQUIRED 注释它们。任何异常都会回滚您的事务。(如果你不抓住并处理它)

于 2012-11-06T08:17:38.453 回答