Мультиарендность в Spring JDB C с разными исходными и целевыми базами данных - PullRequest
0 голосов
/ 13 июля 2020

Я планирую реализовать мультитенантность в приложении Spring JDB C с другой БД для чтения и другой БД для записи. Вот что я сделал до сих пор:

  • Создал локальный объект потока для хранения текущего клиента
  • Расширенный класс AbstractRoutingDataSource из Spring JDB C, который содержит текущий поиск key, я возвращаю ключ как тенант + «источник / цель».
  • У меня есть набор конфигурации БД, который содержит арендатора, например: Если клиент назван «x», я сохраняю «xsource» -> Исходная БД Config, «xtarget» -> target DB config
  • Затем при входе и выходе из границ метода я подделал клиента, добавив «источник» и «цель». Примерно следующее для шага A:

TenantManager - это threadlocal.

public method foo(){
    tenantManager.setTenant(tenantManager.getTenant() + "source");
    //Application Logic goes here
    tenantManager.setTenant(tenantManager.getTenant().replace("source", ""));
}

А затем для другого шага:

public method bar(){
    tenantManager.setTenant(tenantManager.getTenant() + "target");
    //Application Logic goes here
    tenantManager.setTenant(tenantManager.getTenant().replace("target", ""));
}

Приведенный выше подход создает много путаницы, и я не уверен, может ли это работать во время отладки или нет, пожалуйста, посоветуйте, как мне управлять такой ситуацией, поскольку я считаю, что должен быть лучший способ справиться с этим.

...