Spring 容器中多个 'primary' TransactionManager Bean 冲突解决方法
这个异常是因为 Spring 容器中存在多个标记为 'primary' 的 TransactionManager 类型的 Bean,导致无法确定使用哪一个 Bean。
解决方法有两个:
- 明确指定使用哪一个 Bean
可以使用 @Qualifier 注解明确指定使用哪一个 Bean,例如:
@Autowired
@Qualifier('transactionManagerMysqlAccountActiveDB')
private PlatformTransactionManager txManager;
- 取消其他 Bean 的 'primary' 标记
可以取消其他 TransactionManager 类型的 Bean 的 'primary' 标记,例如:
@Bean
public PlatformTransactionManager transactionManagerMysqlAccountActiveDB() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactoryMysqlAccountActiveDB().getObject());
return transactionManager;
}
@Bean
@Primary
public PlatformTransactionManager transactionManagerMysqlActivity() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactoryMysqlActivity().getObject());
return transactionManager;
}
@Bean
public PlatformTransactionManager transactionManagerOracleData() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactoryOracleData().getObject());
return transactionManager;
}
在上面的代码中,取消了 transactionManagerMysqlActivity() 方法上的 @Primary 标记,这样在使用 @Autowired 注解时,就会默认选择 transactionManagerMysqlAccountActiveDB() 方法返回的 TransactionManager 类型的 Bean。
原文地址: https://www.cveoy.top/t/topic/oKP3 著作权归作者所有。请勿转载和采集!