如何使用Spring Data JPA ORM在运行时动态切换数据库

时间:2019-06-11 05:42:13

标签: java spring-boot spring-data-jpa datasource

我想在运行时使用Java,Spring和Spring JPA创建具有多个数据库的应用程序。

实际上,我正在按照以下流程创建多租户应用程序:

1-一个应用程序可能是php:从网站用户将创建帐户,系统将运行该过程并创建数据库和相应的配置。

2-现在将加载主要应用程序(Java + Spring JPA,Spring REST),开始指向包含用户和其他填充数据的新创建的数据库,该数据库可能基于租户ID或其他指向标志。

进一步计划增加第3点; 3- oAuth2也具有安全性。因此配置应该相应。

现在的问题是,如何在Spring Data JPA应用程序中实现此目标并在运行时切换数据库配置?

1 个答案:

答案 0 :(得分:0)

您可以在Spring中预先配置多个数据源,并将关联的存储库隔离在不同的包结构中(不是真正的交换机,而是从同一Spring引导应用访问多个数据源)

spring.datasource.url = ...
....


second.datasource.url=
second.datasource.username=
second.datasource.password=
second.datasource.driver-class-name=

创建一个新配置以扫描隔离包中的存储库,并加载配置属性以构建第二个数据源。

@EnableJpaRepositories(
  basePackages = { "<package containing repo from second database>" }
)
public class SecondDBConfig {
@Bean(name = "secondDataSource")
  @ConfigurationProperties(prefix = "second.datasource")
  public DataSource dataSource() {
    return DataSourceBuilder.create().build();
  }

..创建交易管理器和实体管理工厂

最后,访问连接到不同数据库的存储库。

查看完整的示例here