[英]Spring transaction management txAdvice
在配置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>
因此,基本上,我是一個事務管理器,它與一個建議相關聯,當Throwable異常發生時,該建議會回滾為可能的方法。 並且此建議鏈接到AOP配置,這樣我們可以在應用程序的服務層中指定要應用此事務配置的所有接口。 但這是行不通的。 事務不會回滾發生Throwable異常。 我不明白這適用於注釋,但不適用於XML中的聲明式配置。
我真的很期待您的建議。 我完全被封鎖了。 請幫我。 提前感謝。
<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>
在<aop:config />
,您輸入的表達式無效。 它至少應在*
和fr.def
之間包含一個空格。
接下來,我建議編寫..*.*
而不是.*.*.*
來選擇所有子包中的所有類,而不考慮其深度。
簡而言之,將您的表達式更改為execution(* fr.def.iss.ult.moduleManagement.service.dds..*.*(..))
應該可以使它起作用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.