복붙노트

[SPRING] 다중 임차가있는 스프링 부트 + 스프링 데이터

SPRING

다중 임차가있는 스프링 부트 + 스프링 데이터

내 시스템의 각 클라이언트가 자신의 개인 데이터베이스에 연결할 수 있도록 MultiTenantConnectionProvider를 사용하도록 Spring Boot를 구성 할 수 있습니까?

특히 multi-tenancy에 대해 내장 된 최대 절전 모드 지원을 사용하려고합니다.

그리고 이것은 제가 설정 한 일종의 설정의 예제입니다,하지만 스프링 부트 설정에서 이것을 사용하는 방법을 알 수는 없습니다 :

나는 이러한 속성을 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

나는 또한 내 자신의 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 ...
        }
    };
}

이 중 아무 것도 영향을 미치지 않는 것 같습니다. 그래서 제 질문은 실제로 이러한 다중 테넌트 클래스를 사용하기 위해 spring-boot / spring-data를 얻는 방법입니까?

당신의 도움을 주셔서 감사합니다!

해결법

  1. ==============================

    1.정의되지 않은 JPA / Hibernate의 모든 특성은 application.properties의 spring.jpa.properties 특성을 사용하여 설정할 수 있습니다.

    정의되지 않은 JPA / Hibernate의 모든 특성은 application.properties의 spring.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
    

    최대 절전 모드가 인스턴스의 라이프 사이클을 제어하기 때문에 스프링 관리 Bean과 작동하지 않습니다.

    더 많은 프로퍼티에 대해서는 Spring Boot 레퍼런스 가이드를 참조하십시오.

  2. from https://stackoverflow.com/questions/26898896/spring-boot-spring-data-with-multi-tenancy by cc-by-sa and MIT license