Java 具有两个数据源的Spring引导

Java 具有两个数据源的Spring引导,java,entity-framework,spring-boot,entitymanager,multiple-databases,Java,Entity Framework,Spring Boot,Entitymanager,Multiple Databases,我正试图用两个数据源建立一个SpringBoot项目 一个用于装载,一个用于存储 应用程序道具。 # Primary DataSource datasource.primary.url=url datasource.primary.username=root datasource.primary.password=password datasource.primary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

我正试图用两个数据源建立一个SpringBoot项目

一个用于装载,一个用于存储

应用程序道具。

# Primary DataSource
datasource.primary.url=url
datasource.primary.username=root
datasource.primary.password=password
datasource.primary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

# Secondary DataSource
datasource.secondary.url=url
datasource.secondary.username=root
datasource.secondary.password=password
datasource.secondary.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver
主数据库的配置类

    package com.anders.cphbusiness.db;

import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
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.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.PersistenceContext;
import javax.sql.DataSource;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.anders.cphbusiness.entitiesModel", entityManagerFactoryRef = "entityManager")
public class LoadDataSourceConfig {
    @Bean(name = "dataSource")
    @Primary
    @ConfigurationProperties(prefix = "datasource.primary")
    public DataSource loadingDataSource() {
        return DataSourceBuilder.create().build();
    }

    @PersistenceContext(unitName = "primary")
    @Primary
    @Bean(name = "entityManager")
    public LocalContainerEntityManagerFactoryBean loadingEntityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder.dataSource(loadingDataSource()).persistenceUnit("primary").packages("com.anders.cphbusiness.entitiesModel").build();
    }
}
    package com.anders.cphbusiness.db;

import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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;

import javax.persistence.PersistenceContext;
import javax.sql.DataSource;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.anders.cphbusiness.storingModel", entityManagerFactoryRef = "secondaryEntityManager", transactionManagerRef = "secondaryTransactionManager")
public class StoreDataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "datasource.secondary")
    public DataSource storingDataSource() {
        return DataSourceBuilder.create().build();
    }

    @PersistenceContext(unitName = "secondary")
    @Bean(name = "secondaryEntityManager")
    public LocalContainerEntityManagerFactoryBean storingEntityManagerFactory(
            EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(storingDataSource())
                .packages("com.anders.cphbusiness.storingModel")
                .persistenceUnit("secondary")
                .build();
    }

    @Bean(name = "secondaryTransactionManager")
    public PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder) {
        JpaTransactionManager tm = new JpaTransactionManager();
        tm.setEntityManagerFactory(storingEntityManagerFactory(builder).getObject());
        tm.setDataSource(storingDataSource());
        return tm;
    }
}
辅助数据库的配置类

    package com.anders.cphbusiness.db;

import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
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.LocalContainerEntityManagerFactoryBean;
import org.springframework.transaction.annotation.EnableTransactionManagement;

import javax.persistence.PersistenceContext;
import javax.sql.DataSource;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.anders.cphbusiness.entitiesModel", entityManagerFactoryRef = "entityManager")
public class LoadDataSourceConfig {
    @Bean(name = "dataSource")
    @Primary
    @ConfigurationProperties(prefix = "datasource.primary")
    public DataSource loadingDataSource() {
        return DataSourceBuilder.create().build();
    }

    @PersistenceContext(unitName = "primary")
    @Primary
    @Bean(name = "entityManager")
    public LocalContainerEntityManagerFactoryBean loadingEntityManagerFactory(EntityManagerFactoryBuilder builder) {
        return builder.dataSource(loadingDataSource()).persistenceUnit("primary").packages("com.anders.cphbusiness.entitiesModel").build();
    }
}
    package com.anders.cphbusiness.db;

import org.springframework.boot.autoconfigure.jdbc.DataSourceBuilder;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
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;

import javax.persistence.PersistenceContext;
import javax.sql.DataSource;

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(basePackages = "com.anders.cphbusiness.storingModel", entityManagerFactoryRef = "secondaryEntityManager", transactionManagerRef = "secondaryTransactionManager")
public class StoreDataSourceConfig {

    @Bean
    @ConfigurationProperties(prefix = "datasource.secondary")
    public DataSource storingDataSource() {
        return DataSourceBuilder.create().build();
    }

    @PersistenceContext(unitName = "secondary")
    @Bean(name = "secondaryEntityManager")
    public LocalContainerEntityManagerFactoryBean storingEntityManagerFactory(
            EntityManagerFactoryBuilder builder) {
        return builder
                .dataSource(storingDataSource())
                .packages("com.anders.cphbusiness.storingModel")
                .persistenceUnit("secondary")
                .build();
    }

    @Bean(name = "secondaryTransactionManager")
    public PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder) {
        JpaTransactionManager tm = new JpaTransactionManager();
        tm.setEntityManagerFactory(storingEntityManagerFactory(builder).getObject());
        tm.setDataSource(storingDataSource());
        return tm;
    }
}
我的回购协议在它抱怨的控制器中

@Autowired
private wagerBoardMarksRepo repo;
实际回购

package com.anders.cphbusiness.repositories;

import com.anders.cphbusiness.entitiesModel.WagerBoard;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;


@Repository
public interface WagerBoardRepo extends JpaRepository<WagerBoard, String> {

}
尝试在


关于使用多个数据源设置spring boot的任何建议-提示-指南(最好是项目中使用两个数据源的git)

您能提供错误的完整堆栈跟踪吗?@JonSampson changed abit,尝试遵循另一个指南-立即获取新错误-立即完成stacktrace。看来您已经通过了数据源问题。WagerborardMarksRepo是否注释为@Repository?@JonSampson是的,我将整个repo类添加到了光盘中。您可能不需要在接口上使用@Repository(因为我在中没有看到)。您似乎缺少的是一个
@EnableJpaRepositories
注释,其中包含
WagerborardMarksRepo
中的包。