繁体   English   中英

具有多租户的 Spring Boot + Spring Data

[英]Spring Boot + Spring Data with multi tenancy

是否可以将 Spring Boot 配置为使用 MultiTenantConnectionProvider,以便我系统的每个客户端都连接到自己的私有数据库?

具体来说,我希望对多租户使用内置的休眠支持:

这是我所追求的那种配置的一个例子,但我不知道如何在 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

我还尝试编写我自己的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 使用这些多租户类?

谢谢你的帮助!

任何未定义的 JPA/Hibernate 属性都可以使用application.propertiesspring.jpa.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

它不适用于 Spring 管理的 bean,因为休眠控制着这些实例的生命周期。

有关更多属性,请参阅 Spring Boot 参考指南

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM