程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Making spring-data-mongodb multi-tenant大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Making spring-data-mongodb multi-tenant?

开发过程中遇到Making spring-data-mongodb multi-tenant的问题如何解决?下面主要结合日常开发的经验,给出你关于Making spring-data-mongodb multi-tenant的解决方法建议,希望对你解决Making spring-data-mongodb multi-tenant有所启发或帮助;

这里有很多种为猫皮的方法。基本上,所有这些都归结为你要应用该租约的级别。

基本 基本方法是在每个线程的基础上绑定某种标识客户的密钥,以便你可以找到当前执行线程所处理的客户。通常,这可以通过填充ThreadLocal一些与身份验证相关的信息来实现,因为你通常可以从已登录的用户派生租户。

现在,如果有的话,可以在哪里选择一些租户知识。让我简要概述最常见的方法:

数据库级别的多租户 为多个客户端分离数据的一种方法是每个租户拥有单独的数据库。Spring Data MongoDB为此的核心抽象是MongoDBFactory接口。此处最简单的方法是SimpleMongoDbFactory.getDb(String name)使用数据库名称覆盖并调用父方法,例如,通过租户前缀等丰富。

集合级别的多租户 另一种选择是拥有租户特定的集合,例如通过租户前缀或后缀。实际上,可以通过在@document注释的collectionname属性中使用Spring Expression语言(SpEl)来利用此机制。首先,通过Spring bean公开承租人前缀:

 @Component("tenantProvIDer")
 public class TenantProvIDer {

   public String getTenantID() {
     // … implement ThreadLocal lookup here
   }
 }

然后在你的域类型@document映射中使用SpEL :

 @document(collectionname = "#{tenantProvIDer.getTenantID()}_accounts"
 public class Account { … }

SpEl允许你按名称引用Spring bean并在其上执行方法。MongoTemplate(因此,存储库的抽象是可传递的)将使用文档类的映射元数据,并且映射子系统将评估该collectionname属性以查找有关要与之交互的集合。

解决方法

在去年8 月的一篇文章中,sbzoom提出了一种使spring-data-mongoDB多租户的解决方案:

“你必须创建自己的RepositoryFactoryBean。这是Spring Data MongoDB参考文档中的示例。你仍然必须实现自己的MongoTemplate并延迟或删除sureIndexes()调用。但是你必须重写一些类以确保你调用的是MongoTemplate,而不是Spring。”

有没有人实现这个或类似的东西?

大佬总结

以上是大佬教程为你收集整理的Making spring-data-mongodb multi-tenant全部内容,希望文章能够帮你解决Making spring-data-mongodb multi-tenant所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: