복붙노트

[SPRING] 엔티티와 저장소가 동일한 여러 데이터 소스

SPRING

엔티티와 저장소가 동일한 여러 데이터 소스

현재 스프링 부트 프로젝트가 필요한 프로젝트에서 일하고 있습니다. 동일한 DB 서버에서 여러 데이터 소스 또는 스키마를 활용할 수 있습니다. 나는 가지고있다 여러 데이터 소스 구성을 가르치는 몇 가지 자습서를 엔티티 foo가 데이터 소스 A에 존재하고 막대가있는 스프링 부트 DataSource B below below.,

https://scattercode.co.uk/2016/01/05/multiple-databases-with-spring-boot- and-spring-data-jpa / https://scattercode.co.uk/2013/11/18/spring-data-multiple-databases/ https://medium.com/@joeclever/using-multiple-datasources-with-spring-boot-and-spring-data-6430b00c02e7

하지만 내 유스 케이스는 여러 스키마에 존재하는 foo와 bar이며 하나의 엔티티와 저장소를 사용하여 모든 스키마에 액세스하려고한다. 모든 스키마에서 데이터가 복제되지 않는다.

그래서 User John Doe를 검색해야한다면 Schema 1과 내가 그를 찾지 못하면 다음 스키마로 넘어 간다.

나는 위의 모든 튜토리얼을 시도했다. 유스 케이스)를 해킹하여 개념의 증거. AbstractRoutingDataSource도 살펴 보았습니다.  (http://fizzylogic.nl/2016/01/24/make-your-spring-boot-application-multi-tenant-aware-in-2-steps/, http://kimrudolph.de/blog/spring- 데이터 소스 라우팅) 및 MultiTentancy에 대한 액세스 권한이 있지만이 두 가지 모두 단일 스키마를 언제든지 사용할 수 있습니다. 나는 단지 따라야 할 지침이나 링크가 필요합니다.

미리 감사드립니다.

해결법

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

    1.AbstractRoutingDataSource를보고 사용해야합니다.

    AbstractRoutingDataSource를보고 사용해야합니다.

    따라서 첫 번째 스키마에서 검색하고 발견되지 않은 경우 다음 스키마로 이동해야합니다.

    위의 링크에서 주어진 예제에서,

     CustomerContextHolder.setCustomerType(CustomerType.GOLD);
     List<Item> items = catalog.getItems();
     if(isEmpty(goldItems)){
      CustomerContextHolder.setCustomerType(CustomerType.SILVER);
      items = catalog.getItems();  
     }
    

    자세한 내용은 여기에서 다른 qn에서 찾을 수 있습니다.

  2. ==============================

    2.https://github.com/wmeints/spring-ultultant-demo를 사용하여 문제를 해결했습니다.

    https://github.com/wmeints/spring-ultultant-demo를 사용하여 문제를 해결했습니다.

    귀하의 추천을 위해 @urya에게 감사드립니다.

  3. from https://stackoverflow.com/questions/48674412/multiple-data-sources-with-same-entity-and-repo by cc-by-sa and MIT license