• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

JPAQueryFactory Config 등록 시 멀티 데이터소스는 어떻게 처리하나요 ??

20.12.24 15:46 작성 조회수 238

0

안녕하세요. 강사님.

아래 처럼 config 로 JPAQueryFactory 를 bean 으로 등록하는데 데이터 소스가 여러개 일 때는 어떻게 처리하나요 ? 

@Configuration
public class QuerydslConfig {
@PersistenceContext
private EntityManager entityManager;

@Bean
public JPAQueryFactory jpaQueryFactory() {
return new JPAQueryFactory(entityManager);
}
}

second 데이터 소스를 사용하는 repository 쪽에 아래와 같이 선언해서 사용은 하긴하는데 repository 마다 아래와 같이 해줘야 해서 불편한데.. 편하게 하는 방법 없을까요 ?? 

그리고 아래와 같이하면 autocommit 이나 rollback 등이 second datasource 가 아닌 primary datasource 를 사용하더라고요.

@Repository
public class SecondDataSourceRepository extends QuerydslRepositorySupport {
public SecondDataSourceRepository() {
super(SecondDataSourceRepository.class);
}

@Override
@PersistenceContext(unitName = "secondEntityManager")
public void setEntityManager(EntityManager entityManager) {
super.setEntityManager(entityManager);
this.jpaQueryFactory = new JPAQueryFactory(entityManager);
}

private JPAQueryFactory jpaQueryFactory;
}

답변 1

답변을 작성해보세요.

0

안녕하세요. studyspring님

추가 데이터소스를 사용하면, 추가 데이터소스 전용 트랜잭션 관리자, 추가 데이터 소스 전용 JPA 설정 이런식으로

데이터소스, 트랜잭션, JPA 설정까지 각각 따로 한벌을 만들어서 연결해야 합니다.

그리고 트랜잭션을 사용할 때도 새로 만든 데이터소스용 트랜잭션을 사용하도록 설정해야 합니다.

앞서 설명드린 점에만 특히 주의하시면 spring boot jpa multi datasource로 색해보시면 원하는 예제와 방안을 찾으실 수 있을거에요^^

추가로 궁금해하신 좀 더 편리하게 EntityManager를 찾는 방법이 있습니다^^

JpaContext라는 기능을 사용하는 건데요.

다음 코드를 참고하시면 됩니다^^

    @Autowired

    public void setEntityManager(JpaContext jpaContext) {

        this.entityManager = jpaContext.getEntityManagerByManagedType(domainClass);

감사합니다.