gpt4 book ai didi

java - Spring声明式事务管理: multiple pointcuts

转载 作者:行者123 更新时间:2023-12-02 11:09:57 27 4
gpt4 key购买 nike

我知道已经快周末了,但仍然值得尝试:)

我需要使用多个事务管理器,因此对我来说使用声明式事务管理而不是使用 tx:annotation-driven 是有意义的。但是,我在各种包中都有服务类,并且以下配置不起作用:

<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="dataSource" ref="ds" />
<property name="sessionFactory" ref="sessionFactory" />
</bean>

<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes>
</tx:advice>

<aop:config>
<aop:pointcut id="svcPointcut1" expression="execution(* com.app.services.*.*(..))"/>
<aop:pointcut id="svcPointcut2" expression="execution(* com.app.campaigns.services..*.*(..))"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="svcPointcut1" />
<aop:advisor advice-ref="txAdvice" pointcut-ref="svcPointcut2" />
</aop:config>

有人可以告诉我为什么只有第一个切入点有效而第二个切入点无效吗? com.app.services 包中的服务方法在事务上下文中执行,但 com.app.campaigns.services(及其下面的子包)中的服务方法会抛出 UnsupportedException。请让我脱离这种痛苦吧!非常感谢!

PS:应用程序使用Spring 2.5.6

最佳答案

I need to use multiple transaction managers due to which it makes sense for me to go with declarative transactions management instead of using tx:annotation-driven.

这两者都符合“声明式”事务管理的资格。但更重要的是,您仍然可以将注释驱动的事务与多个交易管理器一起使用。只需提供经理的姓名或限定符,如 "value" attribute of the annotation 。使用此 XML:

<bean id="project1TransactionManager" class="...TransactionManager">
<qualifier value="project1"/>
</bean>
<bean id="project2TransactionManager" class="...TransactionManager">
<qualifier value="project2"/>
</bean>

以下任何一项都应该有效:

@Transactional("project1")
@Transactional("project1TransactionManager")
@Transactional("project2")
@Transactional("project2TransactionManager")

关于java - Spring声明式事务管理: multiple pointcuts,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6713632/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com