[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.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를 살펴보십시오.
from https://stackoverflow.com/questions/44135582/how-to-enable-multitenancy-with-spring-data-jpa by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 매개 변수 객체 속성 (0) | 2019.01.25 |
---|---|
[SPRING] 두 변수를 추가 한 후 BeanCreationException 발생 (0) | 2019.01.25 |
[SPRING] 봄, 최대 절전 모드 - 다 대다 - LazyInitializationException (0) | 2019.01.24 |
[SPRING] Spring Batch Java Config : 예외가 발생하면 단계를 생략하고 다음 단계로 넘어갑니다. (0) | 2019.01.24 |
[SPRING] 스프링 부트 배치 ResourcelessTransactionManager DataSourceProperties $ DataSourceBeanCreationException (0) | 2019.01.24 |