Мультиарендность на уровне базы данных: один из способов разделения данных для нескольких клиентов — иметь отдельные базы данных для каждого арендатора.
Как реализовать мультиарендность в mongo db с помощью morphia
Ответы (1)
Предположим, вы работаете над веб-сервисом или веб-приложением.
Клиент отправит идентификатор арендатора в качестве параметра заголовка.
Напишите один фильтр и получите информацию о арендаторе из кэша по идентификатору арендатора.
Задайте имя схемы в фильтре, например:
MDC.put(Constants.MONGO_TENANT_DB, "uat");
MongoMultiTenancyInterceptor будет вызываться перед любым вызовом операции/формы БД. Строка 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: он получит объект хранилища данных из фабричного метода и выполнит любую операцию с БД.
Я загрузил свой проект на GITHUB, вы можете скачать код с GITHUB
https://github.com/vikashnitk50/spring-morphia-db-poc