Ответ 1
Вы можете указать, какой менеджер tx использовать с @Transactional
, используя атрибут value
:
Значение квалификатора для указанного сделка.
Может использоваться для определения цели менеджер транзакций, соответствующий значение классификатора (или имя bean) конкретный PlatformTransactionManager bean.
Например:
@Transactional("txManager1");
В качестве альтернативы вы можете использовать более явный TransactionProxyFactoryBean
, который дает вам более тонкий контроль над тем, какие объекты проксируются теми менеджерами tx. Это все еще использует аннотации, но оно не обнаруживает автоматически beans, оно явно сконфигурировано на основе bean -by- bean.
Это обычно не проблема, но неразумно иметь несколько менеджеров транзакций, если у вас нет веских оснований для этого. Если вам требуется два менеджера tx, обычно лучше посмотреть, можете ли вы с ним поработать. Например, если у вас есть два источника данных, настроенных на вашем сервере приложений, вы можете включить их как в один JtaTransactionManager, а не через два отдельных JpaTransactionManager
или DataSourceTransactionmanagers
.