数据库级别的多租户:为多个客户端分隔数据的一种方法是为每个租户提供单独的数据库。
答案 0 :(得分:0)
假设您正在处理Web服务或Web应用程序。
客户端会将租户ID作为标头参数发送。
编写一个过滤器,并按租户ID从缓存中获取租户详细信息。
在过滤器中设置架构名称 例如:
MDC.put(Constants.MONGO_TENANT_DB, "uat");
在任何DB操作/ orm调用之前将调用MongoMultiTenancyInterceptor。 String 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():按架构名称从Hashmap返回数据存储
UserRepository:它将从工厂方法获取Datastore对象并执行任何数据库操作。
我已将项目上传到GITHUB,您可以从GITHUB下载代码