这个异常是因为 Spring 容器中存在多个标记为 'primary' 的 TransactionManager 类型的 Bean,导致无法确定使用哪一个 Bean。

解决方法有两个:

  1. 明确指定使用哪一个 Bean

可以使用 @Qualifier 注解明确指定使用哪一个 Bean,例如:

@Autowired
@Qualifier('transactionManagerMysqlAccountActiveDB')
private PlatformTransactionManager txManager;
  1. 取消其他 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。

Spring 容器中多个 'primary' TransactionManager Bean 冲突解决方法

原文地址: https://www.cveoy.top/t/topic/oKP3 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录