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

12
задан informatik01 7 November 2016 в 13:06
поделиться

2 ответа

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

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

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

Например:

@Transactional("txManager1");

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

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

22
ответ дан 2 December 2019 в 06:26
поделиться

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

.
2
ответ дан 2 December 2019 в 06:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: