【问题标题】:Spring Boot Data JPA create dynamic DatasourcesSpring Boot Data JPA 创建动态数据源
【发布时间】:2019-12-02 07:04:15
【问题描述】:

目前我有一个旧的 JSF 项目,我的公司想要切换到更新的技术,如 Spring Boot。问题是我有 1 个主数据库,包含所有信息和每个产品 1 个数据库。当我更新主数据库时,相应的产品数据库也应该更新。所以主数据库用于分发数据。架构完全不一样!

有没有办法将 JPA 与不同的动态数据源一起使用? 例如,如果我更新客户,我会检查所有数据库是否包含此特定客户。如果它们包含它,我想打开到这个数据库的连接。数据库凭证和信息存储在主数据库中。所以这不是静态数据,用户可以创建/连接新数据库到系统。

有没有办法使用动态创建的特定数据源创建 JpaRepository?

在我们的旧项目中:

public ProductDatabaseDAO(final String ipAddress, final String databaseName, final String databaseUser, final String databasePassword) {
    Map <String, String> connectionProperties = EntityManagerFactoryProduct.getStandardProperties();
    connectionProperties.put("hibernate.connection.username", databaseUser);
    connectionProperties.put("hibernate.connection.password", databasePassword);
    connectionProperties.put("hibernate.connection.url", "jdbc:mysql://" + ipAddress + "/" + databaseName + "?useSSL=false" + "&autoconnect=true");
    this.factory = EntityManagerFactoryProduct.getEntityManagerFactory(databaseName, connectionProperties);
    this.databaseName = databaseName;
    this.ipAddress = ipAddress;
    this.databasePassword = databasePassword;
    this.databaseUser = databaseUser;
}

我在 Multi-Tenancy 中尝试过,它就像一个 Charm。但是我必须管理大约 130 个数据库,并且不可能保持 130 个 Hikari 池开放。所以我必须关闭它们,但这听起来像是一个糟糕的解决方案。 我也考虑过更改 Hikari 池的 URL,但这听起来也不是正确的解决方案。

【问题讨论】:

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


【解决方案1】:

您可以在 JPA 中使用多租户 (https://dzone.com/articles/multi-tenancy-using-jpa-spring-and-hibernate-part)
你会满意的。

【讨论】:

  • 我有大约 130 个数据库,我已经使用多租户对其进行了测试。问题是,在某些时候我得到了太多的联系。我通过关闭 HikariDataSources 解决了这个问题,但我认为这不是一个好的解决方案。但也许可以从 Hikari-Pool 更改 JDBC URL,之后我只需要魔法 2 个池。但这听起来像是一个大技巧/解决方法。
  • 嘿@M.Soldin 你解决了这个问题吗?
猜你喜欢
  • 2018-07-22
  • 1970-01-01
  • 2016-10-11
  • 2018-07-27
  • 2014-12-06
  • 2017-04-12
  • 1970-01-01
相关资源
最近更新 更多