홍이의 개발 노트

Spring Boot Multi DataSource 본문

개발이야기/스프링(Spring)

Spring Boot Multi DataSource

코바 2015. 12. 21. 01:25

Spring Boot 는 기본적으로 DataSource 하나를 기준으로 되어 있다. 

그런데 개발을 하다 보면 DataSource는 최소 두개이상이 필요할 경우가 비교적 많이 생긴다.


보통 예를 들면 Mysql 을 Master Slave 를 구조 형태로 따로 접근 해야 한다거나 아니면 관련 없는 레거시 DB를 가져 온다거나 그럴 경우가 있다. 

그럴 경우 기본적인 Spring 같은 경우에는 모든 DataSoure를 선언하고 각각 트랜잭션을 만들고 JPA 또는 MyBatis(ibatis) 등을 사용해서 사용해야 되는 Bean을 DataSource 만큼 만들거나 해야된다.

그런데 Spring Boot 개발 형태를 보면 대부분 직접 설정을 줄이고 속성(properties)으로 설정하여 구성 하는 형태를 (내가 보기엔)추구한다.


그래서 자주 사용 되는 형태라고 생각 되는 하나 이상의 DataSource를 기술 하는 형태가 쉽게 되면 좋겠다는 생각으로 이번에 Spring Boot 모듈 형태로 구성 해보았다.

전체소스

...

  multi-datasource:

...

    default-datasource-name: db1

    datasources:

      db1:

        url: jdbc:h2:~/db1;

        data: classpath:db1Data.sql

        validationQuery: select 1

      db2:

        url: jdbc:h2:~/db2;

        data: classpath:db2Data.sql

        validationQuery: select 1

      db3:

        url: jdbc:h2:~/db3;

        data: classpath:db3Data.sql

        validationQuery: select 1

...


대략 이런 모양으로 직접 DataSource를 한개 이상 기술 할 수 있도록 하는 형태이다. 

그래서 서비스 또는 DAO ( 또는 Repository ) 에서 직접 어노테이션(@DataSource) 으로 DataSource 선택하는 형태이다.

전체소스

...

    @DataSource(DB1)

    @Transactional(readOnly = true)

    public List<String> db1Names() {

        return testDao.getNames();

    }

...


이런 형태로 메소드 별로 다른 DataSource를 사용 할 수 있게 된다.


사용 방법은 단순히 의존성만 추가 하고 설정만 해주면 되는 Spring Boot 형태를 그대로 따라 했다.

당연히 중앙 Maven 레포지토리에 추가가 안되어 있기 때문에 소스를 받아 install 형태로 jar를 배포 후 의존성을 추가 해주야 된다.

실행 방법은 Github를 참고하면된다. 

링크


구체적인 활용방법은 소스안에 있는 Sample 프로젝트를 참고하면 쉽게 확인할 수 있다. 꼭 테스트 코드를 실행해보라.

그리고 혹시 부족한 부분이 발견되면 피드백 또는 풀리퀘를 해주면 대환영이다!