如何使用吗啡在 mongo 数据库中实现多租户

How to implement multi-tenancy in mongo db using morphia

数据库级别的多租户:为多个客户端分离数据的一种方法是为每个租户拥有单独的数据库。

假设您正在开发网络服务或网络应用程序。

  1. 客户端将发送租户 ID 作为 header 参数。

  2. 写一个过滤器,通过租户id从缓存中获取租户详情

  3. 在过滤器中设置架构名称 例如:

    MDC.put(Constants.MONGO_TENANT_DB, "uat");
    
  4. MongoMultiTenancyInterceptor 将在任何 DB operation/orm 调用之前被调用。 字符串 tenantDBName = MDC.get(Constants.MONGO_TENANT_DB);

      LOG.info("Switching to database:  "+tenantDBName);
      if(StringUtils.isNotBlank(tenantDBName)){
              MultitenantDatastoreFactory.setDatabaseNameForCurrentThread(tenantDBName);
      }
      Setting the Database name for current Thread.
    
  5. MultitenantDatastoreFactory:为每个租户模式创建数据存储实例并存储到 HashMap 中。

  6. MultitenantDatastoreFactory.getDS(): Returns 来自 Hashmap 按模式名称的数据存储

  7. UserRepository:它将从工厂方法中获取 Datastore object 并执行任何数据库操作。

我已经在GITHUB上传了我的项目,你可以从GITHUB

下载代码

https://github.com/vikashnitk50/spring-morphia-db-poc