티스토리 뷰

회사에서 신규 프로젝트 개발환경을 세팅하는 과정에서 디비를 2개이상 연동하는일이 생겨서 구현을 해보았는데

간단하게 어떻게 세팅해야하는지 그 방법에 대해 얘기해보고자 한다.

 

그리고 @Primary 어노테이션과 @Qualifier 어노테이션에 대해서도 이번장에서 함께 다뤄보겠다.

 

 

1. DB 2대 세팅

실제 개발환경을 세팅할때는 DBMS도 다르고 접속정보도 다르겠지만 이번글에서는 테스트용이기 때문에

로컬에 설치된 하나의 MySQL에 2개의 DB를 만들어 테스트 해보겠다.

 

 

 

2. Properties 파일에 디비 접속정보 등록

연동하고자할 DB의 접속정보를 입력한다.

 

3. DataSource Bean 설정하기

application.properties에 설정된 2대의 DB접속정보를 읽어드릴 DataSource 객체를 생성한다.

 

@ConfigurationProperties 어노테이션은 이름에서도 유추할 수 있다시피 프로퍼티 설정파일을 읽어드리는 

어노테이션으로 prefix 라는 속성에 값을 세팅해줄 수 있는데 네모칸으로 표시된 값들을 prefix의 값으로 설정한다

 

만일 @ConfigurationProperties 어노테이션옆에 아래와 같은 경고창이 뜨게되면

spring-boot-configuration-processor라는 의존성을 추가하자. 

 

 

이제 Test를 돌려보자 !

Test가 실패했다. 로그를 확인해보니 다음과 같은 Exception이 발생했다.

에러내용은 다음과 같았다.    

No qualifying bean of type 'java.sql.DataSource' available: expected single matching bean but found 2: kjhDataSource,kimjonghyunDataSource

 

그렇다. 3장에서도 설명했지만 Spring은 기본적으로 Bean을 '싱글톤' 으로 관리하는데 DataSource의 Bean을 2개를

생성했기 때문에 Spring은 2개중 어떤 빈을 의존주입을 해야할지 모르기 때문에 해당 Exception이 일어난 것이다.

 

그럼 어떻게 해야할까?  방법은 2가지가 있다.

그것은 위에 잠깐 언급했던 @Primary어노테이션과 @Qualifier 라는 두개의 어노테이션으로 해결할 수가 있다.

 

그전에 두개의 어노테이션은 과연 어떤역할을 해주는건지 Spring docs를 확인해보자

 

필자가 영어해석에 미숙하니 번역기를 통해 한글로 번역했지만 완벽하지는 않지만 대략 이렇게 해석을 해보았다.

 

@Primary 어노테이션은 동일한 타입의 Bean이 여러개 있을경우 해당 어노테이션을 선언해주면 그 Bean이 주입이 될 것이다

@Qualifier 어노테이션은 해당 어노테이션 매개변수에 어떠한 Bean을 주입시켜줄껀지 설정할 수가 있다.

 

그럼 2가지 어노테이션으로 각각 Test를 돌려보자.

 

4. @Primary 어노테이션으로 Test

 

5. @Qualifier 어노테이션으로 Test

두 어노테이션으로 각각 Test를 돌려본 결과 정상적으로 작동되었음을 확인할 수 있었다.

이제 마지막으로 사진1에서 만들어 두었던 2개의 DB에 접근해서 데이터를 조회해보자 !

 

그전에 전 장에서 Mybatis 연동 Test를 했던 설정파일에 몇가지 추가할게 생겼다. 아래사진을 보자

 

6. Mybatis 설정추가

기존에는 DataSource를 하나만 사용했었는데 2개 이상의 Connection이 이뤄지다보니 SqlSessionFactory와 

SqlSesionFactoryBean, SqlSessionTemplate을 각각 DataSource에 맞게 추가해주었다.

 

 

7. DAO 생성 및 XML파일에 SQL 작성

 

모든 준비는 다 끝났다. Test를 돌려보자 !

 

Test가 정상적으로 완료되었다. !!

 

Spring으로 DataSource를 2개이상 구성해본건 처음이었는데 이렇게 겪으면서 모르는 정보도 얻어가고 참 좋다.

현재 1일 1글을 목표로 하고있는데 열심히 꾸준히 작성해봐야겠다.

 

728x90
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함