使用Spring Boot实现多租户

4

我计划开发一个多租户应用程序,并且现在我只是在网上查看不同的实现方式,以了解实施此任务所需的要求。

我打算使用Hibernate + Spring Boot这两种技术。

根据我的阅读,所有不同的教程都使用相同的方法,在配置文件中声明数据源,以便随应用程序启动启动会话工厂,但我真的希望拥有更高级别的应用程序,在该级别中,我可以动态添加租户并输入他们的数据源信息。这样,应用程序就可以获取新租户的信息,而无需触及配置文件并重新启动应用程序。

我考虑过使用单独的数据库来存储我的租户数据源凭据或类似的东西。您能否给我另一种解决这个要求的方法或链接到现有实现,以供我参考。

4个回答

2

我过去也有类似的需求。

我实现了一个DataSource代理类。该类具有租户解析器和一组简单的DataSources映射。所有需要DataSource的地方都使用代理。

在任何方法调用(例如getConnection()),它会解析租户,检查映射中是否已经存在创建好的DataSource(如果没有,则为该租户创建一个新的DataSource并存储在数据库中)。然后调用映射中真正的DataSource的相同方法。

租户解析器基于ThreadLocal,其中租户值存储在过滤器中(从请求头获取租户),并在DataSource代理中使用。


1
你需要做的是通过 AbstractRoutingDataSource 使用 Spring Framework 的动态数据源路由。这个答案 为你解释了所有内容。

1

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


1
这是我使用Spring Boot 2、Spring JPA(Hibernate)、Spring Security 5在MySQL上构建的一个数据库租户多租户应用程序的完整工作示例。我已经解释了它的所有工作原理,并分享了整个代码。请点击这里查看。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接