Spring Boot + Spring Data多租户
是否可以将Spring Boot" title="Spring Boot">Spring Boot配置为使用MultiTenantConnectionProvider,以便系统的每个客户端都连接到自己的私有数据库?
具体来说,我希望对多租户使用内置的hibernate支持:
- http://docs.jboss.org/hibernate/orm/4.1/devguide/zh-CN/html_single/#d5e4561
这是我所追求的那种配置示例,但是我不知道如何在Spring Boot设置中使用它:
- 使用Spring,Hibernate和C3P0在多租户Web应用程序中管理连接池
我尝试将这些属性添加到application.properties
:
spring.jpa.hibernate.multiTenancy=DATABASEspring.jpa.hibernate.tenant_identifier_resolver=com.mystuff.MyCurrentTenantIdentifierResolver
spring.jpa.hibernate.multi_tenant_connection_provider=com.mystuff.MyMultiTenantConnectionProviderImplX
我还尝试编写自己的代码CurrentTenantIdentifierResolver
,MultiTenantConnectionProvider
并尝试从主@Configuration
bean提供这些代码:
@Beanpublic 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使用这些多租户类?
谢谢你的帮助!
回答:
可以使用中的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>
转换为Spring Boot的将是application.properties
文件中的以下属性。
spring.jpa.properties.hibernate.multiTenancy=SCHEMAspring.jpa.properties.hibernate.tenant_identifier_resolver=com.mystuff.MyCurrentTenantIdentifierResolver
spring.jpa.properties.hibernate.multi_tenant_connection_provider=com.webapp.persistence.utility.MultiTenantContextConnectionProvider
针对您的情况(如您的问题所述)。
spring.jpa.properties.hibernate.multiTenancy=DATABASEspring.jpa.properties.hibernate.tenant_identifier_resolver=com.webapp.persistence.utility.CurrentTenantContextIdentifierResolver
spring.jpa.properties.hibernate.multi_tenant_connection_provider=com.mystuff.MyMultiTenantConnectionProviderImplX
由于hibernate控制了这些实例的生命周期,因此它不适用于Spring托管的bean。
有关更多属性,请参见Spring Boot 参考指南。
以上是 Spring Boot + Spring Data多租户 的全部内容, 来源链接: utcz.com/qa/428949.html