gpt4 book ai didi

spring - 在 SPRING BOOT 中配置多个数据库

转载 作者:行者123 更新时间:2023-12-02 00:15:58 26 4
gpt4 key购买 nike

我正在尝试为我的 spring boot 应用程序连接 2 个不同的数据库,但出现此错误:


应用程序启动失败


描述:

com.SyncFibertToolSpring.SyncFibertTool.MydbDB.Config.MydbDbConfig 中方法 entityManagerFactory 的参数 0 需要找不到类型为“org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder”的 bean。

行动:

考虑在您的配置中定义类型为“org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder”的 bean。

你会在下面找到我的两个数据库配置类


package com.SyncFibertToolSpring.SyncFibertTool.MydbDB.Config;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;


@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "mydbEntityManagerFactory",
basePackages = {"com.SyncFibertToolSpring.SyncFibertTool.MydbDB.DAO"})
public class MydbDbConfig {


@Primary
@Bean(name = "mydbDataSource")
@ConfigurationProperties(prefix = "spring.mydb.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}

@Primary
@Bean(name = "mydbEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder, @Qualifier("mydbDataSource") DataSource dataSource) {
return builder.dataSource(dataSource)
.packages("com.SyncFibertToolSpring.SyncFibertTool.MydbDB.entities").

build();
}

@Primary
@Bean(name = "mydbTransactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("mydbEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}

}
package com.SyncFibertToolSpring.SyncFibertTool.fibertoolSyncDB.Config;

import javax.persistence.EntityManagerFactory;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.jdbc.DataSourceBuilder;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(entityManagerFactoryRef = "fibertoolSyncEntityManagerFactory",
basePackages = {"com.SyncFibertToolSpring.SyncFibertTool.fibertoolSyncDB.DAO"})
public class FibertToolDbConfig {

@Primary
@Bean(name = "fibertoolSyncDataSource")
@ConfigurationProperties(prefix = "spring.fibertoolsync.datasource")
public DataSource dataSource() {
return DataSourceBuilder.create().build();
}

@Primary
@Bean(name = "fibertoolSyncEntityManagerFactory")
public LocalContainerEntityManagerFactoryBean entityManagerFactory(
EntityManagerFactoryBuilder builder,
@Qualifier("fibertoolSyncDataSource") DataSource dataSource) {
return builder.dataSource(dataSource)
.packages("com.SyncFibertToolSpring.SyncFibertTool.fibertoolSyncDB.entities").

build();
}

@Primary
@Bean(name = "fibertoolSyncTransactionManager")
public PlatformTransactionManager transactionManager(
@Qualifier("fibertoolSyncEntityManagerFactory") EntityManagerFactory entityManagerFactory) {
return new JpaTransactionManager(entityManagerFactory);
}


}

最佳答案

这里的第一个错误是您定义了两个@Primary 数据源。从两个 @Configuration 类之一中删除注释 @Primary 并将其留给一个类

关于spring - 在 SPRING BOOT 中配置多个数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56968464/

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