gpt4 book ai didi

java - 没有可用的 'javax.sql.DataSource' 类型的合格 bean : more than one 'primary' bean found among candidates:

转载 作者:行者123 更新时间:2023-12-02 01:13:34 27 4
gpt4 key购买 nike

我想将 Spring Boot 配置为使用 2 个 JNDI 数据源。我尝试了这个配置:

application.properties

spring.production-datasource.jndi-name=java:/global/production_gateway
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update

spring.warehouse-datasource.jndi-name=java:/global/production_warehouse
spring.datasource.driver-class-name=org.mariadb.jdbc.Driver
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = update

主数据库

@Configuration
@EnableJpaRepositories(
basePackages = "org.datalis.plugin.production.entity",
entityManagerFactoryRef = "productionEntityManager",
transactionManagerRef = "productionTransactionManager"
)
@EnableTransactionManagement
public class ContextProductionDatasource {

@Autowired
private Environment env;

@Primary
@Bean
@ConfigurationProperties(prefix="spring.production-datasource")
public DataSource productionDataSource() {
return DataSourceBuilder.create().build();
}

@Primary
@Bean
public EntityManager productionEntityManager(EntityManagerFactory emf) {
return emf.createEntityManager();
}

@Primary
@Bean
public PlatformTransactionManager productionTransactionManager(final EntityManagerFactory emf) {
final JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}

@Primary
@Bean
public PersistenceExceptionTranslationPostProcessor productionExceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
}

第二个数据源:

@Configuration
@EnableJpaRepositories(
basePackages = "org.datalis.plugin.warehouse.entity",
entityManagerFactoryRef = "warehouseEntityManager",
transactionManagerRef = "warehouseTransactionManager"
)
@EnableTransactionManagement
public class ContextWarehouseDatasource {

@Autowired
private Environment env;

@Primary
@Bean
@ConfigurationProperties(prefix="spring.warehouse-datasource")
public DataSource warehouseDataSource() {
return DataSourceBuilder.create().build();
}

@Bean
public EntityManager warehouseEntityManager(EntityManagerFactory emf) {
return emf.createEntityManager();
}

@Bean
public PlatformTransactionManager warehouseTransactionManager(final EntityManagerFactory emf) {
final JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(emf);
return transactionManager;
}

@Bean
public PersistenceExceptionTranslationPostProcessor warehouseExceptionTranslation() {
return new PersistenceExceptionTranslationPostProcessor();
}
}

当我部署代码时出现异常:

Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'javax.sql.DataSource' available: more than one 'primary' bean found among candidates: [productio                     nDataSource, warehouseDataSource]"}}

完整错误堆栈:

https://pastebin.com/EsNp2Fp9

你知道我该如何解决这个问题吗?

最佳答案

您只能有 1 个主数据源。其他配置看起来不错。

假设ContextWarehouseDatasource作为辅助连接

像这样从 warehouseDataSource() 中删除 @Primary 并尝试。

@Bean
@ConfigurationProperties(prefix="spring.warehouse-datasource")
public DataSource warehouseDataSource() {
return DataSourceBuilder.create().build();
}

关于java - 没有可用的 'javax.sql.DataSource' 类型的合格 bean : more than one 'primary' bean found among candidates:,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59002892/

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