Как реализовать мультиарендность в mongo db с помощью morphia

Мультиарендность на уровне базы данных: один из способов разделения данных для нескольких клиентов — иметь отдельные базы данных для каждого арендатора.


person Community    schedule 04.06.2016    source источник


Ответы (1)


Предположим, вы работаете над веб-сервисом или веб-приложением.

  1. Клиент отправит идентификатор арендатора в качестве параметра заголовка.

  2. Напишите один фильтр и получите информацию о арендаторе из кэша по идентификатору арендатора.

  3. Задайте имя схемы в фильтре, например:

    MDC.put(Constants.MONGO_TENANT_DB, "uat");
    
  4. 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.
    
  5. MultitenantDatastoreFactory: создание экземпляра хранилища данных для каждой схемы арендатора и сохранение в HashMap.

  6. MultitenantDatastoreFactory.getDS(): возвращает хранилище данных из Hashmap по имени схемы.

  7. UserRepository: он получит объект хранилища данных из фабричного метода и выполнит любую операцию с БД.

Я загрузил свой проект на GITHUB, вы можете скачать код с GITHUB

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

person java baby    schedule 08.06.2016