当前位置: 首页 > 知识库问答 >
问题:

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

赫连瀚
2023-03-14

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

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

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

这可以使用Spring Boot完成吗?

共有2个答案

苏鸿才
2023-03-14

看看这个:

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

我想如果你使用的是spring boot,它可能是一个web应用。因此,携带带有http/header的租户ID,您可以使用不同的数据源。

从逻辑上讲,您可以通过RestController地址或租户ID在header/body/url中进行区分

童冠玉
2023-03-14

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

>

  • 你需要有业务逻辑的动态加载部分。这些部分需要来自租户特定的存储,如文件系统或数据库。一个简单的方法可以是Java脚本引擎,它可以加载计算/逻辑脚本并执行它。更全面的方法是业务规则引擎。有几个,有些是与Spring集成的,你可以谷歌为他们寻找资源。

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

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

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

  •  类似资料:
    • 我目前正试图找出为我的系统设置多租户的最佳方法。我面临的问题是,租户并不总是必须是子域,但可以作为子域的一部分进行设置,子域可以有多个租户。我似乎在网上找不到任何东西可以帮助我在Laravel 6中进行设置。 系统要求: 一台服务器可以有许多子域 系统必须设置一个数据库,该数据库将使用tenant_id来确定哪些数据属于租户。 我目前正在以以下结构将所有子域数据存储在“subdomains”表中:

    • 我必须在j2ee中开发一个多租户SaaS应用程序,从Iaas和PaaS开始实现三种云模型,我选择了openstack和openshift origin。SaaS应用程序的第一个标准是多租户,我知道有三种方法来实现它——单独的数据库——共享数据库,单独的模式——共享数据库,共享模式。我在这里迷失了方向,因为许多框架,比如ATHENA,ORM,比如hibernate,还有TOPLINK。我需要帮助了解

    • 我已经安装了keycloak-angular包,我使用它的方式如下:https://www.npmjs.com/package/keycloak-angular 问题是,在我的应用程序中,我希望有多租户。这意味着在应用程序加载期间不知道领域名。 在说明中,它说“KeycloakService应该在应用程序加载期间使用APP_INITIALIZER标记初始化”,问题是该领域是由用户给定的,在应用程序

    • 我正在使用Java、Spring、Struts2和Hibernate设计一个多租户SaaS Web应用程序。经过一些研究,我选择在共享数据库、共享模式、共享表的方法中实现多租户。并用tenantid标记每个db行。 我已经重写了我的应用程序,所以管理者和DAO将把tenantId作为一个参数,只为正确的数据库资源服务。 当获取信息时,这对所有视图来说都是完美的。也用于创建新的东西(使用登录的用户t

    • 我正在学习多租户应用程序,以及如何使用PostgreSQL的模式来实现这一点。 在研究这个主题时,我发现了一篇文章,作者描述了在多租户应用程序中使用PostgreSQL模式时的糟糕体验。主要问题是迁移性能差和数据库资源使用率高。 似乎只有一个模式(在租户之间共享表)会比每个租户有一个单独的模式带来更好的性能。但我觉得很奇怪。我的想法正好相反,因为较小表上的索引往往比较大表上的索引轻。 为什么在许多

    • 我想知道如何为每个租户提供定制。我想提供在租户想要的每种形式中添加新字段的设施,包括字段名、数据类型等。现在我的问题是如何为这种类型的场景设计数据库表?正如我所想的那样,我们必须给每个表单赋予表单id,每当租户在表单中创建新字段时,应该在数据库表中创建一个新的行,该行应该具有租户id、表单id、字段名称、数据类型等... 现在请给我真正的解决方案的朋友......我需要这个数据库表设计解决方案立即