Page 1 of 1

TenantIdentifier auf Controller-Ebene ändern

Posted: 03 Jan 2025, 17:22
by Guest
Wir implementieren Multitenancy in unserem Produkt und verwenden ein Datenbank-pro-Mandant-Entwurfsmuster. Wir folgten dem hier vorgeschlagenen Mandanten-pro-Anfrage-Muster, Spring Multitenant und Arbeitsbeispiel
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);
}

}
}

Bitte teilen Sie uns mit, ob wir dies zum Laufen bringen können, ohne für alle Schemas manuelle EntityManager/Sessionfactories hinzuzufügen