【发布时间】: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