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

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

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

实际上我正在使用以下流程创建 Multi-Tenancy 应用程序:

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

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

进一步计划添加第 3 点; 3- oAuth2 也保持安全性。所以配置应该是相应的。

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

最佳答案

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

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

关于java - 如何使用 Spring Data JPA ORM 在运行时动态切换数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56537167/

相关文章:

java - 如何将 HttpServletRequest 转换为字符串?

java - 在 Spring MVC 中使用 Java 从 Web Explorer 创建和下载 Excel

java - 如何在静态方法中调用实例方法

java - 在 Tomcat 中部署 Spring-Boot WAR 时崩溃

java - Spring JPA : created timestamp getting flushed after subsequent call to save function

postgresql - 在 kubernetes pod 被杀死后释放 JDBC 连接

java - 如何向 JavaFX Tab 添加多个选项卡关闭事件处理程序?

spring - SpelEvaluationException : Attempted to call method on null context object

spring-boot - Spring JMS 监听器确认

java - Spring事务在异常后不回滚