如何使用吗啡在 mongo 数据库中实现多租户
How to implement multi-tenancy in mongo db using morphia
数据库级别的多租户:为多个客户端分离数据的一种方法是为每个租户拥有单独的数据库。
假设您正在开发网络服务或网络应用程序。
客户端将发送租户 ID 作为 header 参数。
写一个过滤器,通过租户id从缓存中获取租户详情
在过滤器中设置架构名称
例如:
MDC.put(Constants.MONGO_TENANT_DB, "uat");
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.
MultitenantDatastoreFactory:为每个租户模式创建数据存储实例并存储到 HashMap 中。
MultitenantDatastoreFactory.getDS(): Returns 来自 Hashmap 按模式名称的数据存储
UserRepository:它将从工厂方法中获取 Datastore object 并执行任何数据库操作。
我已经在GITHUB上传了我的项目,你可以从GITHUB
下载代码
数据库级别的多租户:为多个客户端分离数据的一种方法是为每个租户拥有单独的数据库。
假设您正在开发网络服务或网络应用程序。
客户端将发送租户 ID 作为 header 参数。
写一个过滤器,通过租户id从缓存中获取租户详情
在过滤器中设置架构名称 例如:
MDC.put(Constants.MONGO_TENANT_DB, "uat");
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.
MultitenantDatastoreFactory:为每个租户模式创建数据存储实例并存储到 HashMap 中。
MultitenantDatastoreFactory.getDS(): Returns 来自 Hashmap 按模式名称的数据存储
UserRepository:它将从工厂方法中获取 Datastore object 并执行任何数据库操作。
我已经在GITHUB上传了我的项目,你可以从GITHUB
下载代码