提问者:小点点

Spring事务管理事务建议


我在配置spring事务管理器时遇到了一些麻烦。我正在开发的应用程序有一个分层的架构。因此,它有一个包含所有事务性服务的服务层。我想让spring在检查到(特定于应用程序的)异常发生时回滚事务。我通过如下注释成功地做到了这一点:

@Transactional(value=“transactionDds”, rollbackfor=“Throwable”)

这很好用。但由于我有这么多服务,因此我想将此配置移动到XML(spring-DAO上下文文件)。这就是我所做的:

<tx:advice id="txAdvice" transaction-manager="transactionManagerDds">
    <tx:attributes>
        <tx:method name="*" read-only="false" propagation="REQUIRED" rollback-for="Throwable"/>
    </tx:attributes>
 </tx:advice>
 <aop:config>
    <aop:pointcut id="transRollbackOp" expression="execution(*fr.def.iss.ult.moduleManagement.service.dds.*.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="transRollbackOp"/>
  </aop:config> 

  <bean id="transactionManagerDds" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
     <property name="dataSource" ref="beanDataSourceFactory" />  
      <qualifier value="transactionDds"/> 
  </bean>

所以基本上,我是一个事务管理器,它与一个通知相关联,当一个可抛出的异常发生时,该通知回滚到可能的方法。并且该建议链接到AOP配置,这样我们指定应用该事务配置的应用程序的服务层中的所有接口。但是这个不管用。事务不回滚,出现可抛出的异常。我不明白这适用于注释,但不适用于XML中的声明性配置。

我真的很期待你的建议。我完全被封锁了。请帮帮我。提前感谢。


共1个答案

匿名用户

<aop:config>
    <aop:pointcut id="transRollbackOp" expression="execution(*fr.def.iss.ult.moduleManagement.service.dds.*.*.*(..))"/>
    <aop:advisor advice-ref="txAdvice" pointcut-ref="transRollbackOp"/>
</aop:config>

在你的

接下来,而不是. *. *.*,我建议编写…*.*,它选择所有子包中的所有类,而不管深度如何。

简而言之,将表达式更改为执行(*fr.def.iss.ult.moduleManagement.service.dds…*.*(…))应该可以使其工作。