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

带Spring引导的多租户

江鹏
2023-03-14

我正计划开发一个多租户应用程序,目前我只是在研究网络上的不同实现,以了解实现此类任务所需的需求。HibernateSpring引导是我计划使用的技术。

从我的阅读资料来看,所有不同的教程都使用相同的方法,即在配置文件中声明数据源,以便在应用程序启动时启动会话工厂,但我真的希望有一个更高级别的应用程序,在那里我可以动态添加租户并输入他们的数据源信息。这样应用程序就可以获得新租户的信息,而无需触摸配置文件并重新启动应用程序。

我想建立一个单独的数据库,在那里我可以存储租户的数据源凭据或类似的东西。你能给我另一种方法来解决这个需求吗?或者给我一个现有实现的链接,我可以参考一下。

谢谢

共有3个答案

段阳夏
2023-03-14

在我的问题中。我实现了MultiTenantConnectionProviderCurrentTenantIdentifierResolver。并使用DataSourceLookup按租户选择数据源。这个链接对我很有帮助。

欧旻
2023-03-14

您需要做的是通过AbstractRoutingDataSource使用Spring Framweork的动态数据源路由。这个答案为你解释了一切。

云景焕
2023-03-14

我过去也有类似的要求。

我实现了DataSource代理类。该类具有租户解析程序和简单数据源的映射。所有需要DataSource的地方都使用代理。

在解析租户的任何方法调用(例如getConnection())上,检查映射是否包含已创建的数据源(如果不是,则为租户创建一个新的数据源并存储在数据库中)。然后调用地图中真实数据源的相同方法。

租户解析器是基于线程本地的,其中租户值存储在筛选器中(从请求标头获得租户),并在DataSource代理中使用。

 类似资料:
  • 我有一个spring boot微服务,我们在其中调用多个服务(比如服务a和服务B)。我试图根据某些条件在多个线程上异步调用这两个服务,一旦处理完成,我想合并服务A和服务B的响应。 我知道我们可以使用@Async异步运行一个进程,并使用ExecutorService为一个服务启动多个线程。 但是我不确定如何把所有的东西放在一起。所以在这里寻找任何建议? 我知道这在上面主要是理论上解释的,但我尝试了跟

  • 我有一个简单的Spring Boot应用程序(在STS中创建为“starter project”)。我使用log4j2进行日志记录 无论我尝试什么,我都没有在交换中看到任何消息;我只在控制台中看到它们。 我成功地将log4j(1)与旧版本的org.springframework.amqp:spring-rabbit:1.5.6 AmqpAppender(org.springframework.am

  • 我必须实现多租户Web应用程序,具有以下要求 > 单表多租户:特定实体的所有租户数据都将存储在一个表中,TENANT_DISCRIMINATOR(TENANT_ID)作为每个表中的一列。 一些表格,例如Master Countries、Masters,我希望它对所有租户都是通用的,即在这些表中,不会有像TENANT\u DISCRIMINATOR(TENANT\u ID)这样的列,但我仍然希望无缝

  • 我在创建可以动态连接到多个数据库的spring boot应用程序时遇到问题,具体取决于用户输入。基本上,应用程序在不同的数据库上运行相同的sql查询。建模我的尝试在此之后,我收到以下错误: -- 配置类: 属性文件: 关于我如何实现这一点有什么想法吗?正如你所知,我对这种多数据库配置还不是非常精通。

  • 我们正面临着解决这个问题的艰难时刻!我们正在尝试在不使用默认租户的情况下为Spring Boot服务使用MTA。这意味着当当前上下文中没有租户时,我们希望从我们的CurrentTenantIdentifierResolver实现返回null。这在我们用JavaEE+Hibernate+Deltaspike数据构建的其他服务中运行良好,但在Spring服务启动时失败。 异常消息如下:“由:org.h

  • 我认为为每个租户创建一个Redis实例是一个很好的解决方案。 我有一个包含租户id和Redisendpoint的映射,这是专用于这个租户的。 地图数据如下所示: