복붙노트

[SPRING] Repository에 대한 특정 DataSource를 설정하는 방법?

SPRING

Repository에 대한 특정 DataSource를 설정하는 방법?

@Repository에 특정 데이터 소스를 할당 할 수 있습니까?

일반적으로 테스트 데이터 소스를 사용하려는 테스트 환경을 만들고 싶지만 일부 CrudRepository는 다른 DB (프로덕션 DB, 읽기 전용 작업)에서 작동해야합니다.

저장소에 명시 적으로 사용할 데이터 소스를 명시 적으로 말할 수 있습니까?

공용 인터페이스 MyRepository는 CrudRepository {}을 확장합니다.

해결법

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

    1.@EnableJpaRepositories는 귀하의 질문에 대한 답변입니다. 이것은 비공식 문서에 따라 CrudRepository와 함께 작동해야합니다.

    @EnableJpaRepositories는 귀하의 질문에 대한 답변입니다. 이것은 비공식 문서에 따라 CrudRepository와 함께 작동해야합니다.

    이 방법에 대한 자세한 내용은이 자습서를 참조하십시오. 나는 당신이 그것을 훨씬 더 명확하게 언급 할 수 있기 때문에 여기에 코드를 올리려고 노력하지 않았다.

    튜토리얼 링크 ...

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

    2.DataSource와 JpaRepository는 모두 EntityManager에 연결됩니다. 당신은 당신의 요구 사항을 충족시키기 위해 리파지토리를 별도의 패키지로 분리해야 할 것입니다.

    DataSource와 JpaRepository는 모두 EntityManager에 연결됩니다. 당신은 당신의 요구 사항을 충족시키기 위해 리파지토리를 별도의 패키지로 분리해야 할 것입니다.

    다음은 그 예입니다.

    <bean id="emf1" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource">
        <bean .../>
      </property>
      ...
    </bean>
    <jpa:repositories base-package="org.example.package1" entity-manager-factory-ref="emf1"/>
    
    <bean id="emf2" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
      <property name="dataSource">
        <bean .../>
      </property>
      ...
    </bean>
    <jpa:repositories base-package="org.example.package2" entity-manager-factory-ref="emf2"/>
    
  3. ==============================

    3.그것은 당신의 디자인에 달려 있습니다. 당신이 따라갈 수있는 다른 구현이 있기 때문입니다. 두 개의 데이터 소스에 대해 두 개의 bean을 선언 할 수 있습니다. 코드에서 어느 것을 명중 시킬지 지정하십시오. 그렇지 않으면 두 개의 다른 컨텍스트를 정의 할 수 있습니다. 그리고 당신이 전화를 걸 서비스를 코드에서 다시 지정해야하는 공유 된 컨텍스트. 첫 번째 접근법에 도움이 될 수있는 오래된 질문입니다.

    그것은 당신의 디자인에 달려 있습니다. 당신이 따라갈 수있는 다른 구현이 있기 때문입니다. 두 개의 데이터 소스에 대해 두 개의 bean을 선언 할 수 있습니다. 코드에서 어느 것을 명중 시킬지 지정하십시오. 그렇지 않으면 두 개의 다른 컨텍스트를 정의 할 수 있습니다. 그리고 당신이 전화를 걸 서비스를 코드에서 다시 지정해야하는 공유 된 컨텍스트. 첫 번째 접근법에 도움이 될 수있는 오래된 질문입니다.

  4. ==============================

    4.EntityManager를 선언 할 때 @PersistenceContext 어노테이션의 이름 속성을 설정하기 만하면된다.

    EntityManager를 선언 할 때 @PersistenceContext 어노테이션의 이름 속성을 설정하기 만하면된다.

    @PersistenceContext(name="persistence-unit-name")
    private EntityManager em;
    
  5. from https://stackoverflow.com/questions/29397522/how-to-set-a-specific-datasource-for-a-repository by cc-by-sa and MIT license