[개발] mysql 이 이중화 일때 사용하는 jdbc driver (spring + mybatis + mysql 환경)

Posted by 자렌
2012. 4. 22. 00:01 개발

mysql 은 이중화를 하게 되면 master, slave 구조로 리플리케이션으로 설정한뒤 사용하게 됩니다.
이구조일때
master 테이블은 insert,update,delete 쿼리등만 실행을 하며
slave   테이블은 select 쿼리만 실행하여
속도 향상을 꾀하게 됩니다

구성하는 방법은 http://pelican7.egloos.com/2576704 를 참고하시구요

이 부분에서 select 쿼리와 나머지 쿼리를 분류하려면 자바소스상의 작업이 필요하나
mysql 에서 제공하는 jdbc driver 를 사용하면 이런 내용이 필요가 없습니다

아래는 해당 jdbc 내용입니다.

jdbc driver :
jdbc url     : jdbc:mysql:replication://마스터IP,슬레이브IP/디비명

적용시 소스..

package com.sample.dao;

import java.util.List;

import org.apache.ibatis.annotations.Select;
import org.springframework.transaction.annotation.Transactional;

import com.sample.domain.Sample;

@Transactional(readOnly=true)
public interface SampleDao {

    @Select("SELECT * FROM SAMPLE")
    public List<Sample> list();
   
    @Select("SELECT * FROM SAMPLE")
    @Transactional(readOnly=false)
    public List<Sample> list2();
   
}


원래라면 리플렉션 드라이버로 얻은 jdbc connection 에서 connection.setReadOnly(true) 를 할 경우에만 slave 에서 select 해오나

spring 의 @Transactional 어노테이션으로 설정하여 해당 옵션을 설정해줌

2011-12-29 정상동작 확인