Подтвердить что ты не робот

Spring несколько источников @Transactional

<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"); для определения того, какой менеджер транзакций я использую, если у меня есть несколько менеджеров транзакций?

4b9b3361

Ответ 1

Вы можете указать, какой менеджер tx использовать с @Transactional, используя атрибут value:

Значение квалификатора для указанного сделка.

Может использоваться для определения цели менеджер транзакций, соответствующий значение классификатора (или имя bean) конкретный PlatformTransactionManager bean.

Например:

@Transactional("txManager1");

В качестве альтернативы вы можете использовать более явный TransactionProxyFactoryBean, который дает вам более тонкий контроль над тем, какие объекты проксируются теми менеджерами tx. Это все еще использует аннотации, но оно не обнаруживает автоматически beans, оно явно сконфигурировано на основе bean -by- bean.

Это обычно не проблема, но неразумно иметь несколько менеджеров транзакций, если у вас нет веских оснований для этого. Если вам требуется два менеджера tx, обычно лучше посмотреть, можете ли вы с ним поработать. Например, если у вас есть два источника данных, настроенных на вашем сервере приложений, вы можете включить их как в один JtaTransactionManager, а не через два отдельных JpaTransactionManager или DataSourceTransactionmanagers.

Ответ 2

Подробнее о необходимости более одного менеджера транзакций. Возможно, вы попытаетесь последовательно выполнить вложенные или отдельные транзакции - тогда вы можете использовать разные параметры распространения. Вы можете достичь этого с помощью конфигурации с помощью диспетчера транзакций, см. Распространение транзакций.