복붙노트

[SPRING] 스프링 데이터 Jpa로 멀티 테넌시를 사용하는 방법

SPRING

스프링 데이터 Jpa로 멀티 테넌시를 사용하는 방법

배경 : 나는 멀티 테넌트 (Multitenant) SaaS 애플리케이션을 구축 중이며 멀티 테넌시 방식으로 단일 데이터베이스, 공유 스키마를 선택했습니다. 모든 테이블에는 세입자 데이터를 분리하기위한 구분자 열 "tenantId"가 있습니다. 나는 스프링 프레임을 응용 프로그램 프레임 워크로 사용하고 JPA 공급자로서 Hibernate를 사용하여 데이터 계층에 스프링 데이터 jpa를 사용하고 있습니다. 스프링 데이터가 상용구 코드를 제거하는 데 도움이되는 방법을 정말 좋아하고 현재 아래의 저장소를 코딩했습니다.

@Repository
public interface UserRepository extends JpaRepository<User,Long>{

}

및 아래의 서비스,

public class UserService{
    @Autowired
    private UserRepository userRepo;
    public User getUser(){
        User user = userRepo.findOne(id);
    }
}

문제 설명 : 사용자를 얻고 싶을 때 특정 조직의 사용자를 얻고 싶습니다. 나는 임차인 기준을 어떻게 추가 할 것인가, 나는 상용 저장소 코드를 도입 할 것이기 때문에 커스텀 저장소 구현을 쓰고 싶지 않다.

시도한 솔루션 :

i) Hibernate Interceptor - onPrepareStatememt : 이것은 sql이 문자열이기 때문에 유용하지 않으며 문자열 조작을 원하지 않습니다.

ii) Spring AOP로 Hibernate 필터 활성화 : @Filter를 사용하는 Annotated 엔티티. 세션에서 필터 설정을 시도했다. 애스펙트가 호출되지 않기 때문에 이것은 작동하지 않습니다.

@AfterReturning(pointcut = "execution(* org.hibernate.jpa.internal.EntityManagerImpl.OpenSession(..))", returning = "session")
public void forceFilter(JoinPoint joinPoint, Object session) {

    Session hibernateSession = (Session) session;
    session.enableFilter("tenantFilter")
}

최대 절전 모드 필터는 유망한 접근 방법처럼 들리지만 작동하는 솔루션을 넣으려는 벽에 부딪혔다. Spring 데이터가 내부적으로 데이터를 쿼리하기 위해 사용하는 세션에서 최대 절전 모드 필터를 활성화하는 대체 접근 방법이 있는지 알고 싶습니다.

해결법

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

    1.Spring Boot, JPA, Hibernate 및 Postgres를 사용하여 다중 테넌트 (multi-tenant) 응용 프로그램에 대해 블로그를 작성했으며 입주자 접근 방식에 따라 DB를 사용했지만 DISCRIMINATOR (다른 테넌트를 지정하는 데 사용되는 하나 또는 여러 개의 테이블 열) 적은 구성.

    Spring Boot, JPA, Hibernate 및 Postgres를 사용하여 다중 테넌트 (multi-tenant) 응용 프로그램에 대해 블로그를 작성했으며 입주자 접근 방식에 따라 DB를 사용했지만 DISCRIMINATOR (다른 테넌트를 지정하는 데 사용되는 하나 또는 여러 개의 테이블 열) 적은 구성.

    CurrentTenantIdentifierResolver 구현 (TenantDvdRentalIdentifierResolverImpl.java), DvdRentalMultiTenantInterceptor.java Spring MVC 인터셉터 및 ThreadLocal을 사용하여 tenantId를 저장 / 전달하는 DvdRentalTenantContext.java를 살펴보십시오.

  2. from https://stackoverflow.com/questions/44135582/how-to-enable-multitenancy-with-spring-data-jpa by cc-by-sa and MIT license