【问题标题】:Build Multi-Tenant Application using Spring Boot使用 Spring Boot 构建多租户应用程序
【发布时间】:2018-08-05 00:17:19
【问题描述】:

我正在使用 Spring Boot 开发一个多租户应用程序。

系统的业务逻辑将在每个租户的基础上发生变化。

例如,应用程序上的特定租户租赁空间可能希望使用一些复杂的自定义逻辑来更改值的计算方式。我想为应用程序注册默认行为/依赖项并允许特定租户覆盖它。

这可以使用 Spring Boot 完成吗?

【问题讨论】:

  • 是的。是的,它可以。

标签: spring-boot multi-tenant


【解决方案1】:

这个问题很模糊。但我尝试提供一些指示。似乎有两个不同的问题需要解决:

  1. 您需要拥有可动态加载的业务逻辑部分。这些部分需要来自特定于租户的存储,例如文件系统或数据库。解决此问题的一种简单方法可能是 Java ScriptEngine,它可以加载计算/逻辑脚本并执行它。更全面的方法是业务规则引擎。有好几个,有的和spring集成的,你可以google一下找资源。

  2. 您需要可感知租户的数据访问,最有可能是数据库访问。这包括

    • 按租户区分数据,例如通过为每个租户使用单独的数据库(方案),或在每个表中存储租户标识符的列。 Spring 不直接支持这一点,但底层技术(例如 JPA 实现)可能。我公司实施了……像 MongoDB 内部这样,它并不像听起来那么难。
    • 一种确定操作属于哪个租户的方法。对于 web/webservice 应用程序,租户通常作为主机名、URL 路径或自定义 HTTP 标头的一部分提供。有一个计划为 Servlet 4.0 标准化它,但据我所知,它最终没有进入规范。所以你是靠你自己的,但它真的不难实施。

总结一下:Spring (Boot) 对它没有直接的帮助,但是通过上面的提示,您可以开始研究在使用 Spring Boot 时自己实现它。

【讨论】:

  • 感谢@rainerfrey 的回答。 C# 中有一个名为 Autofac 的依赖注入框架,我们可以在其中创建应用程序级默认容器。实例化租户识别策略。创建一个多租户容器。注册特定于租户的覆盖。我想知道 Spring Boot 是否具备上述能力。我从您的 cmets 清楚地理解了第 2 点,并且我知道这一点。第 1 点是我不知道的。
  • 第 1 点仅源自您的陈述,即每个租户的业务逻辑都会发生变化。
【解决方案2】:

看看这个:

https://github.com/singram/spring-boot-multitenant

我认为如果您使用的是 Spring Boot,它可能是一个 Web 应用程序。所以携带Tenant-ID和http/header,可以使用不同的数据源。

逻辑上,你可以通过 RestController 地址或在 header/body/url 中携带的 Tenant-ID 来区分你的租户

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-17
    • 2021-11-07
    • 2021-05-02
    • 2021-06-09
    • 2019-07-01
    • 2015-02-02
    • 2014-09-02
    • 2012-05-22
    相关资源
    最近更新 更多