gpt4 book ai didi

java - Spring多个@Transactional数据源

转载 作者:IT老高 更新时间:2023-10-28 13:45:28 24 4
gpt4 key购买 nike

<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"); 来识别我使用哪个事务管理器吗?

最佳答案

您可以使用 value attribute 指定与 @Transactional 一起使用的 tx 管理器。 :

A qualifier value for the specified transaction.

May be used to determine the target transaction manager, matching the qualifier value (or the bean name) of a specific PlatformTransactionManager bean definition.

例如:

@Transactional("txManager1");

或者,您可以使用更明确的 TransactionProxyFactoryBean,它可以让您更细粒度地控制哪些对象由哪些 tx 管理器代理。这仍然使用注释,但它不会自动检测 bean,它是在逐个 bean 的基础上显式配置的。

这通常不是问题,但拥有多个事务管理器并不明智,除非您有充分的理由这样做。如果您发现自己需要两个 tx 管理器,通常最好看看是否可以凑合使用一个。例如,如果您在应用服务器中配置了两个数据源,则可以将它们合并到一个 JtaTransactionManager 中,而不是两个单独的 JpaTransactionManagerDataSourceTransactionmanagers

关于java - Spring多个@Transactional数据源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1961371/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com