如何使Spring Data处理多个异构数据源?

我已经成功使用Spring的“ 使用JPA访问数据”教程。我已经有了自己的CrudRepository,只需配置一个特定的DataSource

@Bean即可自动工作,并且它们之间的内部连接由Spring Data(或Spring Boot,很难确定是哪个)来管理。

但是,我不知道如何使该自动管道处理第二个DataSource @Bean。注入第二个将导致自动配置类在启动期间爆炸。

有关如何执行此操作的任何想法?我为此所做的搜索导致出现了一些文章,讨论了用于负载平衡或其他目的的多个 同类

数据源,这实际上不是我所需要的。我有多个数据库,它们具有完全独立的内容,需要插入该应用程序,我真的想避免仅由于第二个数据库进入混合而复制所有自动配置。

我希望这很简单,但是我担心这是自动配置中不受支持的边缘情况。

回答:

您可以创建两个数据源和实体管理器,其中一个标记为@Primary

@Configuration

@EnableJpaRepositories(basePackages = "io.eddumelendez.springdatajpa.repository1")

public class FirstConfiguration {

@ConfigurationProperties(prefix = "datasource.postgres")

@Bean

@Primary

public DataSource postgresDataSource() {

return DataSourceBuilder.create().

build();

}

@Bean(name = "entityManagerFactory")

@Primary

public LocalContainerEntityManagerFactoryBean emf1(EntityManagerFactoryBuilder builder){

return builder

.dataSource(postgresDataSource())

.packages("io.eddumelendez.springdatajpa.domain1")

.persistenceUnit("users")

.build();

}

}

另一个数据源的配置:

@Configuration

@EnableJpaRepositories(basePackages = "io.eddumelendez.springdatajpa.repository2", entityManagerFactoryRef = "emf2")

public class SecondConfiguration {

@Bean

@ConfigurationProperties(prefix = "datasource.mysql")

public DataSource mysqlDataSource() {

return DataSourceBuilder.create().build();

}

@Bean

public LocalContainerEntityManagerFactoryBean emf2(EntityManagerFactoryBuilder builder){

return builder

.dataSource(mysqlDataSource())

.packages("io.eddumelendez.springdatajpa.domain2")

.persistenceUnit("customers")

.build();

}

}

您的application.properties应该如下所示:

datasource.mysql.url=jdbc:mysql://localhost:3306/mysql_demo

datasource.mysql.username=root

datasource.mysql.password=root

datasource.postgres.url=jdbc:postgresql://localhost:5432/postgres_demo

datasource.postgres.username=postgres

datasource.postgres.password=postgres

以上是 如何使Spring Data处理多个异构数据源? 的全部内容, 来源链接: utcz.com/qa/406290.html

回到顶部