zon*_*ski 12 java spring hibernate spring-data spring-boot
是否可以将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
Run Code Online (Sandbox Code Playgroud)
我也试着编码了我自己CurrentTenantIdentifierResolver和MultiTenantConnectionProvider,并试图从我的主要@Configuration豆服务这些了:
@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 ...
}
};
}
Run Code Online (Sandbox Code Playgroud)
这似乎没有任何影响,所以我的问题是如何让spring-boot/spring-data使用这些多租户类?
谢谢你的帮助!
可以使用中的spring.jpa.properties属性设置未定义的JPA/Hibernate的任何属性application.properties.
您链接到的示例有3个多租户属性:
<prop key="hibernate.multiTenancy">SCHEMA</prop>
<prop key="hibernate.tenant_identifier_resolver">com.webapp.persistence.utility.CurrentTenantContextIdentifierResolver</prop>
<prop key="hibernate.multi_tenant_connection_provider">com.webapp.persistence.utility.MultiTenantContextConnectionProvider</prop>
Run Code Online (Sandbox Code Playgroud)
转换为Spring Boot的将是application.properties文件中的以下属性.
spring.jpa.properties.hibernate.multiTenancy=SCHEMA
spring.jpa.properties.hibernate.tenant_identifier_resolver=com.mystuff.MyCurrentTenantIdentifierResolver
spring.jpa.properties.hibernate.multi_tenant_connection_provider=com.webapp.persistence.utility.MultiTenantContextConnectionProvider
Run Code Online (Sandbox Code Playgroud)
根据您的情况(如您的问题所述).
spring.jpa.properties.hibernate.multiTenancy=DATABASE
spring.jpa.properties.hibernate.tenant_identifier_resolver=com.webapp.persistence.utility.CurrentTenantContextIdentifierResolver
spring.jpa.properties.hibernate.multi_tenant_connection_provider=com.mystuff.MyMultiTenantConnectionProviderImplX
Run Code Online (Sandbox Code Playgroud)
它不适用于Spring manged beans,因为hibernate控制这些实例的生命周期.
有关更多属性,请参阅Spring Boot 参考指南.
| 归档时间: |
|
| 查看次数: |
9601 次 |
| 最近记录: |