使用Spring Boot构建多租户应用程序

时间:2018-08-05 00:17:20

标签: spring-boot multi-tenant

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

系统的业务逻辑将根据每个租户进行更改。

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

这可以使用Spring Boot完成吗?

2 个答案:

答案 0 :(得分:0)

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

  1. 您需要具有可动态加载的业务逻辑部分。这些部分需要来自特定于租户的存储,例如文件系统或数据库。一种简单的解决方法是Java ScriptEngine,它可以加载计算/逻辑脚本并执行它。一种更全面的方法是业务规则引擎。有几种,有些与spring集成,您可以在Google上搜索它们以查找资源。

  2. 您需要承租人感知的数据访问,很可能是数据库访问。这包括

    • 通过租户区分数据,例如通过使用每个租户单独的数据库(方案),或在每个表中存储租户标识符的列中。 Spring并不直接支持此功能,但是底层技术(例如JPA实现)可能会支持。我公司实施了对于MongoDB在内部这样,它并不像听起来那样难。
    • 一种确定动作属于哪个租户的方法。对于Web / Web服务应用程序,通常将租户作为主机名,URL路径或自定义HTTP标头的一部分提供。有一个计划针对Servlet 4.0对此进行标准化,但据我所知最终并未将其纳入规范。因此,您可以独自一人,但实施起来确实并不困难。

所以总结一下:Spring(Boot)并不能直接提供很多帮助,但是使用上面的指针,您可以开始使用Spring Boot自己研究实现它。

答案 1 :(得分:0)

检查一下:

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

我认为,如果您使用的是Spring Boot,则可能是一个Web应用程序。因此,在带有http / header的租户ID时,您可以使用其他数据源。

从逻辑上讲,您可以通过RestController地址或在抬头/正文/ URL中携带的Tenant-ID区分您的租户