提问人:user1923944 提问时间:11/30/2022 更新时间:11/30/2022 访问量:18
Spring 不会完全回滚所有事务
Spring does not fully rollback all the transactions
问:
我有一个 spring 应用程序,其中访问任何服务的典型路径如下所示:
Util 类 -> 工厂类 -> 服务类 -> dao
有一个模块可以处理与工作流审批相关的所有内容,因此为了使用任何服务,我将调用以下内容: WorkflowLocalServiceUtil -> WorflowFactory -> WorkflowLocalServiceImplementaion -> WorkflowDAO
我有一个服务,当我调用它时,它将调用其他 5 个服务来执行数据库事务(所有方法都在同一 WorkflowService 上定义),如下所示:
WorkflowLocalServiceUtil.addAll() -> WorkflowLocalServiceUtil.add1() & & WorkflowLocalServiceUtil.add2() & & WorkflowLocalServiceUtil.add3() & & WorkflowLocalServiceUtil.add4() & & WorkflowLocalServiceUtil.add5()。
我故意在服务函数中抛出一个未经检查的异常,该异常将由 WorkflowLocalServiceUtil.addAll() 调用,以查看是否执行的所有 5 个事务都将回滚。
我发现 spring 部分回滚(有些事务确实回滚,有些则没有)
以下是我的配置:
<bean id="com.sage.workflow.service.WorkflowLocalService"
class="com.sage.workflow.service.WorkflowLocalServiceImpl">
<property name="wfTrainingRequestDAO" ref="WFTrainingRequestDAO" />
<property name="wfTrainingRequestLevelDAO" ref="WFTrainingRequestLevelDAO" />
<property name="wfTrainingRequestAttachmentDAO" ref="WFTrainingRequestAttachmentDAO" />
<property name="wfTrainingRequestQueryDAO" ref="WFTrainingRequestQueryDAO" />
<property name="wFTrainingRequestEmailDAO" ref="WFTrainingRequestEmailDAO" />
<property name="wFTrainingRequestNomineeDAO" ref="WFTrainingRequestNomineeDAO" />
<property name="wFTrainingRequestLevelNomineeDAO" ref="WFTrainingRequestLevelNomineeDAO" />
<property name="wFTrainingRequestCGroupDAO" ref="WFTrainingRequestCGroupDAO" />
</bean>
<bean id="com.sage.workflow.service.WorkflowLocalService.transaction"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
lazy-init="true">
<property name="transactionManager">
<ref bean="txManager" />
</property>
<property name="target">
<ref bean="com.sage.workflow.service.WorkflowLocalService" />
</property>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="delete*">PROPAGATION_REQUIRED</prop>
<prop key="update*">PROPAGATION_REQUIRED</prop>
<prop key="set*">PROPAGATION_REQUIRED</prop>
<prop key="review*">PROPAGATION_REQUIRED</prop>
<prop key="*">PROPAGATION_SUPPORTS,readOnly</prop>
</props>
</property>
</bean>
<bean id="com.sage.workflow.service.WorkflowLocalServiceFactory"
class="com.sage.workflow.service.WorkflowLocalServiceFactory"
lazy-init="true">
<property name="service">
<ref bean="com.sage.workflow.service.WorkflowLocalService.transaction" />
</property>
</bean>
<bean id="txManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref local="sessionFactory" />
</property>
</bean>
<!-- Workflow DAOs -->
<bean id="WFTrainingRequestDAO"
class="com.sage.workflow.dao.WFTrainingRequestDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="WFTrainingRequestLevelDAO"
class="com.sage.workflow.dao.WFTrainingRequestLevelDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="WFTrainingRequestAttachmentDAO"
class="com.sage.workflow.dao.WFTrainingRequestAttachmentDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="WFTrainingRequestQueryDAO"
class="com.sage.workflow.dao.WFTrainingRequestQueryDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="WFTrainingRequestEmailDAO"
class="com.sage.workflow.dao.WFTrainingRequestEmailDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="WFTrainingRequestNomineeDAO"
class="com.sage.workflow.dao.WFTrainingRequestNomineeDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="WFTrainingRequestLevelNomineeDAO"
class="com.sage.workflow.dao.WFTrainingRequestLevelNomineeDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
<bean id="WFTrainingRequestCGroupDAO"
class="com.sage.workflow.dao.WFTrainingRequestCGroupDAO">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
我的问题是,为什么 spring 没有回滚所有交易?
答: 暂无答案
评论