我有两个类,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()
中所做的更新不会回滚。
帮助将不胜感激。谢谢。
答案 0 :(得分:-1)
您可能想要使用注释(更容易)
“Spring 2.0及更高版本中的声明式事务配置与以前的Spring版本有很大不同。主要区别在于不再需要配置TransactionProxyFactoryBean bean。”
您喜欢服务A呼叫服务B并使用@Transactional Propagation.REQUIRED注释它们。 任何异常都将回滚您的事务。 (如果你没有抓住并处理它)