È possibile configurare Spring Boot per utilizzare un MultiTenantConnectionProvider in modo che ciascun client del sistema si connetta al proprio database privato?Spring Boot + Spring Data con multi tenancy
In particolare sto cercando di utilizzare il supporto per sospensione built-in per il multi-tenancy:
E questo è un esempio del tipo di configurazione sono dopo, ma io non riesco a capire come utilizzare questo in una configurazione di avvio primavera:
Ho provato ad aggiungere queste proprietà per application.properties
:
spring.jpa.hibernate.multiTenancy=DATABASE
spring.jpa.hibernate.tenant_identifier_resolver=com.mystuff.MyCurrentTenantIdentifierResolver
spring.jpa.hibernate.multi_tenant_connection_provider=com.mystuff.MyMultiTenantConnectionProviderImplX
Ho anche provato codificare fino mia CurrentTenantIdentifierResolver
e MultiTenantConnectionProvider
e ho cercato di servire questi dal mio principale @Configuration di fagioli:
@Bean
public CurrentTenantIdentifierResolver currentTenantIdentifierResolver() {
return new CurrentTenantIdentifierResolver() {
public String resolveCurrentTenantIdentifier() {
// this is never called ...
}
public boolean validateExistingCurrentSessions() {
// this is never called ...
}
};
}
@Bean
public MultiTenantConnectionProvider multiTenantConnectionProvider() {
return new AbstractMultiTenantConnectionProvider() {
protected ConnectionProvider getAnyConnectionProvider() {
// this is never called ...
}
protected ConnectionProvider selectConnectionProvider(String s) {
// this is never called ...
}
};
}
Nessuno di questi sembra avere alcun effetto quindi la mia domanda è davvero come ottenere i dati spring-boot/spring per utilizzare queste classi multi-tenant?
Grazie per il vostro aiuto!
Vedere la mia domanda [qui] (https://stackoverflow.com/questions/44366221/hibernate-multitenancy-with-spring-jpa).
Uso un 'LocalContainerEntityManagerFactoryBean' e funziona.
Ma non capisco completamente la differenza tra questo e '.yml'or'.properties'.
Sono d'accordo con @ M.Deinum, in 'yml' hibernate controlla il ciclo di vita di' mulitTenantConnectionProvider' e 'CurrentTenantIdentifierResolver'. Ma non so perché. – linghu