Der obige Ansatz funktioniert gut, wenn wir bereits wissen, in welcher Datenbank/welchem Schema wir suchen möchten.
Wir Wir haben einen Anwendungsfall, bei dem wir im Standardschema suchen müssen und, wenn es nicht gefunden wird, in einem anderen Schema suchen müssen. Sobald die Anfrage jedoch die Controller-Ebene erreicht, können wir den Kontext nicht mehr ändern und es bleibt nur das Standardschema erhalten. Ich habe es mit dem folgenden Code versucht -
Code: Select all
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);
}
}
}