12
<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="data.emf" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager" />


<bean id="transactionManager2" class="org.springframework.orm.jpa.JpaTransactionManager">
    <property name="entityManagerFactory" ref="data.emf" />
</bean>

<tx:annotation-driven transaction-manager="transactionManager2" />


サービスレイヤーで、@Transactional(name="transactionManager2"); 複数のトランザクションマネージャーがある場合、使用するトランザクションマネージャーを識別するために使用できますか?

4

2 に答える 2

24

属性@Transactionalを使用して、使用するtxマネージャーを指定できます。value

指定されたトランザクションの修飾子の値。

特定のPlatformTransactionManagerBean定義の修飾子値(またはBean名)と一致するターゲットトランザクションマネージャーを決定するために使用できます。

例えば:

@Transactional("txManager1");

または、より明示的なを使用することもできますTransactionProxyFactoryBean。これにより、どのオブジェクトがどのtxマネージャーによってプロキシされるかをよりきめ細かく制御できます。これは引き続きアノテーションを使用しますが、Beanを自動検出せず、Beanごとに明示的に構成されます。

通常、これは問題にはなりませんが、非常に正当な理由がない限り、複数のトランザクションマネージャーを使用することは賢明ではありません。2つのtxマネージャーが必要な場合は、通常、1つで実行できるかどうかを確認することをお勧めします。JpaTransactionManagerたとえば、アプリサーバーで2つのデータソースを構成している場合、2つの別々のまたはではなく、両方を1つのJtaTransactionManagerに組み込むことができますDataSourceTransactionmanagers

于 2009-12-25T16:44:57.893 に答える
2

複数のトランザクションマネージャーの必要性についての詳細。ネストされたトランザクションまたは個別のトランザクションを順番に実行しようとしている可能性があります。その場合は、さまざまな伝播設定を使用できます。これは、単一のトランザクションマネージャーを使用した構成で実現できます。トランザクションの伝播を参照してください。

于 2009-12-25T18:52:43.743 に答える