当前位置: 首页 > 面试题库 >

Making spring-data-mongodb multi-tenant

干鑫鹏
2023-03-14
问题内容

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

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

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


问题答案:

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

基本
基本方法是在每个线程的基础上绑定某种标识客户的密钥,以便你可以找到当前执行线程所处理的客户。通常,这可以通过填充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属性以查找有关要与之交互的集合。



 类似资料:
  • 本文向大家介绍bootstrap data与jquery .data,包括了bootstrap data与jquery .data的使用技巧和注意事项,需要的朋友参考一下 jquery官网对.data函数描述是:在匹配元素上存储任意相关数据 或 返回匹配的元素集合中的第一个元素的给定名称的数据存储的值。 存储键值(key/value):     取键值   以上这些都很容易掌握和理解,今天在看bo

  • .data : * 可用于存储你需要的数据。 myTween.data={data1:'value1',data2:'value2',} //存储 myTween.data.data1 //读取 .data适用于TweenMaxTweenLite .data的参数 .data 示例 .box { width:50px; height:50px; border-radiu

  • .data : * 用于储存或者读取任何你想要的数据。 timeline.data={data1:'value1',data2:'value2',} //设置数据 timeline.data.data1 //读取数据 .data适用于TimelineMaxTimelineLite .data的参数 .data 示例 .box { width:50px; height:50px;

  • 数据包用于加载和保存应用程序中的所有数据。 数据包有很多类,但最重要的类是 - Model Store Proxy Model 模型的基类是Ext.data.Model 。 它代表应用程序中的实体。 它将商店数据绑定到视图。 它具有后端数据对象到视图dataIndex的映射。 在商店的帮助下获取数据。 创建模型 为了创建模型,我们需要扩展Ext.data.Model类,我们需要定义字段,它们的名称

  • Firebase数据表示JSON对象。 如果您从Firebase信息中心打开应用,则可以通过点击+号手动添加数据。 我们将创建一个简单的数据结构。 您可以查看下面的图片。 在上一章中,我们将Firebase连接到了我们的应用程序。 现在,我们可以将Firebase记录到控制台。 console.log(firebase) 我们可以创建对玩家收藏的引用。 var ref = firebase

  • Data Model Inference Criticism Data Data defines a set of observations. There are three ways to read data in Edward. They follow the three ways to read data in TensorFlow. Preloaded data. A constant o

  • ember-data ember-data is a library for robustly managing data in applications built withEmber.js. ember-data is designed to be agnostic to the underlying persistencemechanism, so it works just as well

  • 我看了一下下面的问题 与SpringDataJPA相比,使用SpringDataREST有哪些优势? 它不太符合我的需要。我的数据库在MYSQL上,我选择了Spring-Data-JPA实现。REST能给我带来哪些我在简单的Spring-Data-JPA中找不到的额外优势?例如,如果明天,我决定实现缓存b/w我的业务和数据库模块,在这种情况下,我将不得不写较小的代码?哪个容易配置?哪一个更灵活,如