是否可以配置Spring Boot使用MultiTenantConnectionProvider,以便系统的每个客户端连接到自己的私有数据库?
具体而言,我希望使用内置的Hibernate多租户支持:
这是我想要的配置示例,但我无法弄清如何在Spring Boot设置中使用它:
我尝试将这些属性添加到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
我也尝试编写自己的CurrentTenantIdentifierResolver
和MultiTenantConnectionProvider
代码,并尝试从我的主要@Configuration bean中提供这些服务:
@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 ...
}
};
}
目前所有尝试都没有任何作用,因此我的问题是如何让spring-boot / spring-data使用这些多租户类?
谢谢你的帮助!
LocalContainerEntityManagerFactoryBean
,它有效。<br/> 但我并不完全理解这个和.yml
或.properties
之间的区别。<br/>我同意@M.Deinum的观点,在yml
中,Hibernate控制mulitTenantConnectionProvider
和CurrentTenantIdentifierResolver
的生命周期。但我不知道为什么。 - linghu