Spring多个@Transactional数据源

        

在我的服务层,我可以使用@Transactional(name="transactionManager2"); 如果我有多个事务管理器,以确定我使用哪个事务管理器?

您可以使用value属性指定要与@Transactional使用的tx管理器:

指定事务的限定符值。

可用于确定目标事务管理器,匹配特定PlatformTransactionManager bean定义的限定符值(或bean名称)。

例如:

 @Transactional("txManager1"); 

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

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

更多关于需要多个事务管理器的信息。 您可能尝试按顺序执行嵌套或单独的事务 – 然后您可以使用不同的传播设置。 使用单个事务管理器进行配置可以实现这一点,请参阅事务传播