Вышеупомянутый подход работает хорошо, если мы уже знаем, в какой базе данных/схеме мы хотим выполнять поиск.
Мы есть вариант использования, когда нам нужно искать в схеме по умолчанию, а если не найдено, то в другой схеме. Но как только запрос достигает уровня контроллера, мы не можем переключить контекст, и он сохраняет только схему по умолчанию. Я попробовал использовать код ниже -
Код: Выделить всё
public class PersonController {
@Qualifier("otherSchemaDataSource")
private final DataSource otherSchemaDataSource;
public PersonDto getPerson(@PathVariable String personId) {
try {
return personService.getById(personId); //search with default schema
} catch (Exception e) {
// search in other schema if not found in default schema
TenantContext.setTenantInfo("other_schema");
Object oo = "other_schema";
sessionFactory.withStatelessOptions().tenantIdentifier(oo);
tenantIdentifierResolver.resolveCurrentTenantIdentifier();
multiTenantConnectionConfig.setDataSource(otherSchemaDataSource);
multiTenantConnectionConfig.getConnection("other_schema");
multiTenantConnectionConfig.setDataSource(ecmArchiveDataSourc);
return personService.getById(personId);
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... ller-level
Мобильная версия