簡體   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