JPA Querydsl 을 사용시 database 마다 datasource를 각각 생성해주게 된다.
이 경우, querydsl 설정 등 여러가지 설정들이 개별적으로 설정된다.
Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'javax.persistence.EntityManagerFactory' available: expected single matching bean but found 2: 이하 생략 |
Description: Parameter 0 of constructor in com.invitation.module.rds.repository.invitation.InvitationConfigurationRepositoryImpl required a single bean, but 2 were found: - invitationJpaQueryFactory: defined by method 'invitationJpaQueryFactory' in class path resource [com/invitation/module/rds/config/database/QueryDslConfiguration.class] - privacyJpaQueryFactory: defined by method 'privacyJpaQueryFactory' in class path resource [com/invitation/module/rds/config/database/QueryDslConfiguration.class] |
DatabaseConfiguration.java
Datasource가 여러 개일 경우 @Primary 어노테이션을 추가해주어야 한다.
* @Primary 어노테이션은 여러 개의 중복되는 Bean 들 중에서 어떤 Bean을 먼저 적용할지 우선순위를 정해준다.
* Datasource가 여러 개일 경우에는 EntityManagerFactory, EntityManager 등 각 DB 마다 다르게 연결되어야 하므로 메인이 되는 DB Configuration에는 @Primary 어노테이션을 추가해주어야 한다.
@Qualifier 어노테이션은 Primary와 다르게 우선순위가 아닌, 스프링 컨테이너가 여러 개의 Bean을 찾았을 때 추가정보를 제공한다.
QueryDslConfiguration.java
- DatabaseConfiguration.java 에서 EntityManagerFactory 빈 생성시 QueryDslConfiguration.java에서 설정했던 EntityManager의 UnitName을 PersistenceUnitName을 지정해주어야 한다.
QuerydslRepositorySupport 를 상속받아 생성자에 JpaQueryFactory를 주입시켜 해결.
참고
https://programmer-chocho.tistory.com/78
QueryDSL + multi data source 연동하기
1.QueryDSL + single data source 인 경우 DataSourceConfiguration - entityManagerFactory 생성 메서드 - 데이터소스 클래스를 생성하는 것이 주 내용이 아니기 때문에 entityManagerFactory 생성 메소드만 올린다. @Bean public
programmer-chocho.tistory.com
[QueryDSL] Spring Boot 에서 QueryDSL JPA 사용하기
QueryDSL 을 본격적으로 사용해보자
velog.io
https://velog.io/@shining_dr/Querydsl-Repository-expansion
Querydsl Repository 확장에 대한 고찰
개요 Querydsl이 존재하기 이전의 JPA를 사용하는 Spring 프로젝트에서는 검색 조건에 따라 게시물을 검색하는 등의 Dynamic Query (동적 쿼리) 를 처리하기 위해서는 JPQL을 통한 문자열 처리나, JPA Criteria
velog.io