<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");
определить, какой менеджер транзакций я использую, если у меня есть несколько менеджеров транзакций?
Вы можете указать, какой менеджер tx использовать с @Transactional
, используя значение значение
, атрибут :
Значение квалификатора для указанного транзакция.
Может использоваться для определения цели менеджер транзакций, соответствующий значение квалификатора (или имя компонента) конкретный PlatformTransactionManager определение bean-компонента.
Например:
@Transactional("txManager1");
В качестве альтернативы вы можете использовать более явный TransactionProxyFactoryBean
, который дает вам более детальный контроль над тем, какие объекты проксируются какими tx-менеджерами. При этом по-прежнему используются аннотации, но не происходит автоматического определения bean-компонентов, он настраивается явно для каждого компонента.
Обычно это не проблема, но нецелесообразно иметь несколько менеджеров транзакций, если вы не есть очень веская причина для этого. Если вам нужны два менеджера tx, обычно лучше посмотреть, сможете ли вы обойтись одним. Например, если у вас есть два источника данных, настроенных на вашем сервере приложений, вы можете объединить их в один JtaTransactionManager, а не в два отдельных JpaTransactionManager
или DataSourceTransactionmanager
.
More о необходимости использования более чем одного менеджера транзакций. Возможно, вы пытаетесь делать вложенные или отдельные транзакции последовательно - тогда вы можете использовать различные настройки распространения. Этого можно добиться с помощью конфигурации с использованием одного менеджера транзакций, см. Распространение транзакций.
.