簡體   English   中英

Spring 聲明式事務管理:多個切入點

[英]Spring declarative transaction management : multiple pointcuts

我知道它幾乎是周末,但仍然值得一試:)

我需要使用多個事務管理器,因此使用聲明性事務管理而不是使用 tx:annotation-driven go 對我來說很有意義。 但是,我在各種包中有服務類,並且以下配置不起作用:

<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 package 中的服務方法在事務的上下文中執行,但 com.app.campaigns.serviceedException 中的服務方法拋出 UnsupportedException(以及它下面的)。 請讓我擺脫這種痛苦! 萬分感謝!

PS:應用使用Spring 2.5.6

我需要使用多個事務管理器,因此使用聲明性事務管理而不是使用 tx:annotation-driven go 對我來說很有意義。

這兩者都符合“聲明性”事務管理的條件。 不過,更重要的是,您仍然可以將注釋驅動的事務與多個 tx 管理器一起使用。 只需將管理器的名稱或限定符作為注釋的“值”屬性 有了這個 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")

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM