gpt4 book ai didi

java - spring mvc 与 jpa 中的 Multi-Tenancy 架构

转载 作者:太空宇宙 更新时间:2023-11-04 14:53:55 24 4
gpt4 key购买 nike

我的企业应用程序架构中遇到了一个严重的问题。我当前的应用程序是一个使用 spring Framework 3.2+jpa 2.0 的 Web 应用程序。现在我需要在当前应用程序中支持 Multi-Tenancy 。

我的要求是,当用户登录系统时,应从各自的数据库提供用户的数据。简而言之,我需要多个数据库支持,这可能会导致不同的连接字符串。那么如何动态连接数据库呢?

我的另一个问题是租户(应用程序的特定客户端)可以动态注册自己,成功注册后,我需要为该租户创建一个包含数据库创建和初始化等的环境,并成功创建环境用户的租户能够访问该应用程序。那么问题是如何动态创建环境,如何动态创建EntityManagerFactory

非常欢迎任何实现 Multi-Tenancy 的建议......

最佳答案

在 Web 环境中,可以通过创建在/etc/hosts 文件或 Windows\System32\drivers\etc\hosts 中定义的特定于租户的别名来实现 Multi-Tenancy ,以便映射特定于租户的别名托管到同一个 servlet 容器。

完成后,您可以定义一个 servlet 过滤器,该过滤器将读取当前使用的主机并将其与另一个映射进行比较(例如在属性文件中定义),并填充指示当前租户的 HTTP session 参数.

这里,租户已加入 session 。

您必须定位一个公共(public)数据库和一个特定的“tenant_database”表。该表必须保存数据库名称、密码、端口等所有数据源信息,以建立与目标租户数据库的连接。

此时您可以构建一个entityManagerFactory:

  Map<String, String> properties = new HashMap<String, String>();
properties.put("javax.persistence.jdbc.user", "admin");
properties.put("javax.persistence.jdbc.password", "admin");
EntityManagerFactory emf = Persistence.createEntityManagerFactory(
"jdbc:mysql://localhost:3306/myDB", properties);

你现在只需要考虑从正确的地方获取它..:)

希望对你有帮助

关于java - spring mvc 与 jpa 中的 Multi-Tenancy 架构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23426850/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com