【问题标题】:Spring Boot: Handle configuration in multitenant applicationSpring Boot:在多租户应用程序中处理配置
【发布时间】:2021-11-07 22:21:05
【问题描述】:

我正在实现一个 Spring Boot 应用程序,它将提供一个多租户环境。在我的案例中,这是通过为每个客户使用数据库模式来实现的。示例见this project

现在我想知道如何实现特定于租户的配置。我正在使用@ConfigurationProperties 来捆绑我的属性值,但这些值只会被实例化一次,而不是针对每个租户。

如果我想使用带有多个租户特定 git 存储库的 Spring Cloud Config 作为配置后端怎么办。在 Spring Cloud Config 中使用jdbc backend 时可以吗?

有什么办法可以使用默认的 Spring 机制,还是我必须自己实现一个基于数据库的配置框架?

编辑:例如,我有两个租户,分别称为租户 1 和租户 2。两者都在相同的上下文中运行在相同的应用程序上,并写入数据库方案 tenant_1 和 tenant_2。

通过 keycloak 识别租户(请参阅Spring Keycloak multi tenant example)。所以我从 jwt 令牌中识别出tenantId 并选择数据库连接,如here 所述。

但现在我需要对 @Configuration bean 使用相同的机制。因为据我所知@Configuration bean 是单例,所以每个应用程序范围总是有一个配置,而不是每个租户一个配置。

所以使用 Spring Cloud Config Tenant1 使用 https://git-url/tenant1,Tenant2 使用 Hashicorp Vault 作为后端,也许 Tenant3 将使用基于 jdbc 的配置后端。所有这些都在一个(当然是可扩展的)应用程序中完成。

【问题讨论】:

    标签: spring spring-boot multi-tenant spring-cloud-config


    【解决方案1】:

    您可以在您的场景中使用Spring Cloud Config,它是可以采用的。它易于配置并提供开箱即用的功能。对于您的特定场景,您可以运行任意数量的微服务,但所有微服务都由一个 Spring Cloud Config Server 控制,该 Spring Cloud Config Server 连接到一个 Git Repository。您的所有微服务都在向Spring Cloud Config Server 询问配置属性,它直接从Git Repository 获取属性。该存储库可以有多个属性文件。它可以保存所有微服务的通用属性或基于特定服务的配置属性。如果您想更安全地保护机密财产,也可以通过HashiCorp Vault 实现。我将在下面留下一张图片,让您更好地了解这个概念。

    在下图中,您可以看到Git Repository 具有通用配置属性文件和不同服务的特定配置属性文件,但在同一个存储库中。

    我将为您添加另一张图片,以便更好地了解如何将其与应用程序配置文件一起安排。

    最后,我将添加一些额外的东西来展示Spring Cloud Config 的强大功能以及它允许​​我们使用的开箱即用功能。您也可以在运行的应用程序中自动刷新配置属性。您可以配置 Spring Cloud Config 来做到这一点。我将添加一个架构图来实现这一点。

    此答案的参考资料来自 Spring in Action, Fifth Edition 克雷格·沃尔斯

    【讨论】:

    • 谢谢,我很了解 Spring Cloud Config,它肯定在我的清单上。但据我所知,@Configurable-Beans 是单例的,因此您不能为每个租户拥有一个配置后端。我在我的问题中添加了一个示例。
    【解决方案2】:

    如果您的应用程序使用租户特定文件(html 模板等),则可以应用以下内容。因为我使用以下方法来处理许多租户并且工作正常且易于维护。

    我建议您为所有租户配置维护一致的配置源 (JDBC)。这有助于您拥有一个可缓存和可扩展的应用程序源。此外,您可以让租户导航到配置页面以管理他们的设置并随时更改它们以满足他们的需求。 (示例设置:每页记录数、主题、徽标、过滤器等...)

    当您想在租户注册时自动配置租户时,将租户配置保存在 git 文件中将是一项艰巨的任务,因为这将涉及几个分布式服务。将它们放在以tenantId 为列的TenantSettings 表中可以帮助您立即获取数据,而且很容易。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-20
      • 2023-01-25
      • 1970-01-01
      • 2015-01-10
      相关资源
      最近更新 更多