私のプロジェクトでは、1つのトランザクションでさらに多くのデータベースを処理する必要があります。トランザクションの注釈またはxxx
1:しかし、XMLを使用して、それが正常に動作します:
<bean id="transactionManager1"
class="org.springframework.jdbc.DataSourceTransactionManager">
<qualifier value="order"/>
</bean>
<bean id="transactionManager2"
class="org.springframework.jdbc.DataSourceTransactionManager">
<qualifier value="account"/>
</bean>
2に従うとして、アノテーションを使用して、これがエラー "重複した注釈"
public class TransactionalService {
@Transactional("order")
@Transactional("account")
public void processTwoDatabases(String name) { ... }
}
XMLセグメントを報告し
<tx:advice id="txAdvice1" transaction-manager="transactionManager1">
<!-- 定义方法的过滤规则 -->
<tx:attributes>
<tx:method name="process*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
<aop:pointcut expression="execution (* com.service.impl.*.*(..))" id="services1"/>
<aop:advisor advice-ref="txAdvice1" pointcut-ref="services1"/>
</aop:config>
<tx:advice id="txAdvice2" transaction-manager="transactionManager2">
<tx:attributes>
<tx:method name="process*" propagation="REQUIRED" read-only="false"
rollback-for="java.lang.Exception"/>
</tx:attributes>
</tx:advice>
<aop:config proxy-target-class="true">
<aop:pointcut expression="execution (* com.service.impl.*.*(..))" id="services2"/>
<aop:advisor advice-ref="txAdvice2" pointcut-ref="services2"/>
</aop:config>
2つのトランザクションのいずれかが失敗した場合、私はすべてのトランザクションをロールバックします。私の方法では、2つのtransations次のよう
'(1)(2)5( '' '(3)自分のビジネス・ロジック・コード' '(4)トランザクション2端' を開始トランザクション2 ' を開始トランザクション1 )transaction1 end ' なので、1-4の間に例外がスローされると、2つのトランザクションがロールバックされます。 (4)と(5)の間に例外がスローされ、外部トランザクションのみがロールバックされます 、内部トランザクションはコミットされます。 '@Roman Puchkovskiy' –
XTトランザクションについての私の編集に注意してください –