Я планирую реализовать мультитенантность в приложении 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", ""));
}
Приведенный выше подход создает много путаницы, и я не уверен, может ли это работать во время отладки или нет, пожалуйста, посоветуйте, как мне управлять такой ситуацией, поскольку я считаю, что должен быть лучший способ справиться с этим.