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=DATABASE

spring.jpa.hibernate.tenant_identifier_resolver=com.mystuff.MyCurrentTenantIdentifierResolver

spring.jpa.hibernate.multi_tenant_connection_provider=com.mystuff.MyMultiTenantConnectionProviderImplX

我还尝试编写自己的代码CurrentTenantIdentifierResolverMultiTenantConnectionProvider并尝试从主@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使用这些多租户类?

谢谢你的帮助!

回答:

可以使用中的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=SCHEMA

spring.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=DATABASE

spring.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

回到顶部