2016-09-01 6 views
7

내 응용 프로그램은 Spring Data JPA를 사용하여 Spring Boot, Hibernate, MySQL을 기반으로합니다.스프링 부트 레파지토리의 다중 데이터 소스 주석이 달린 인터페이스

사용 사례는 마스터 mysql 노드에서 제공되는 모든 트래픽을 피하기 위해 읽기 작업을 수행하기 위해 슬레이브 db 노드를 사용하는 경우입니다. 이를 달성하는 한 가지 방법은 여러 개의 Entity Managers가 별도의 데이터 소스 (하나는 마스터, 다른 하나는 슬레이브 노드)를 가리키는 것입니다. 이 방법은 SO 질문 및 블로그 아래에서 잘 설명되어 있습니다. 내가 끼 었어

https://scattercode.co.uk/2016/01/05/multiple-databases-with-spring-boot-and-spring-data-jpa/

Spring Boot, Spring Data JPA with multiple DataSources

내가 내 저장소 주석 인터페이스에서 다른 사용 사례에 대해 서로 다른 엔티티 관리자를 삽입 할 수있는 방법이 있는지 이해하는 것입니다.

내가 할 수있는 유일한 방법은 아래와 같이 관련 persistenceContext로 주석이 달린 사용자 지정 엔티티 관리자를 사용하는 사용자 지정 구현으로 저장소를 확장하는 것입니다.

public interface CustomerRepository extends JpaRepository<Customer, Integer>, MyCustomCustomerRepository{ 
} 

public class MyCustomCustomerRepositoryImpl implements MyCustomCustomerRepository { 

     @PersistenceContext(unitName = "entityManagerFactoryTwo") 
     EntityManager entityManager; 
} 

이 사용자 지정 구현을하지 않으려합니다. 이 사용 사례를 해결하는 데 도움이되는 경우 (매우 공통적이어야한다고 생각합니다).

참고 : 엔티티는 두 데이터베이스에서 모두 동일하므로 엔티티 검색을위한 별도의 패키지를 제공하므로 유사한 솔루션이 작동하지 않을 수 있습니다.

+0

합니까 [이 샘플] (https://github.com/snicoll-demos/demo-multi-entity-managers/)하는 데 도움이? –

+1

공유 한 데모에는 서로 다른 dbs의 두 개의 엔티티가 있습니다. 그러한 경우에 두 개의 엔티티 관리자를 사용할 때 충돌을 피하는 것이 더 쉬워집니다. 나에게 엔티티는 우리가 마스터 또는 슬레이브로 사용할 때와 동일하게 유지됩니다. –

답변

3

다음은 사용할 수있는 좋은 샘플입니다. dynamic-datasource-routing-with-spring. 서비스 메소드를 필수 데이터베이스에 연결하는 사용자 정의 주석에 대한 인터셉터 인 AbstractRoutingDatasource +을 찾을 수 있습니다. 그러나 데이터 소스 스위치를 명시 적으로 사용할 수 있습니다.

+0

샘플이 xml 구성을 사용하여 suffix를하고 있지만 내 프로젝트가 주로 주석 중심이므로 제공된 대답을 통해 기능을 수행하는 방법에 대한 좋은 컨텍스트를 얻을 수 있습니다. 감사 :) –

관련 문제