2017년 1월 11일 수요일

Spring + MySql + JAVA Config Master / Slave 구조

까먹지 말자 블로그(http://kwon37xi.egloos.com/) 에서 찾아 적용 해보았다.

MySql Master / Slave 구조 설정이 생각보다 쉽지 않았다.

열심히 구글링 한 결과 까먹지 말자 블로그(http://kwon37xi.egloos.com/) 도착해 소스를 발견 하여 적용 해봤는데

잘되는듯 하다.

import javax.sql.DataSource;
import net.sf.log4jdbc.Log4jdbcProxyDataSource;
import org.apache.commons.dbcp.BasicDataSource;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;


/**
 * {@link kr.pe.kwonnam.replicationdatasource.LazyReplicationConnectionDataSourceProxy} 를 통한 리플리케이션 테스트 설정
 * *
 * 동일한 테이블에 동일한 양의 데이터가 들어있지만 쓰기쪽은 write_x 읽기 쪽은 read_x 라는 형태의 name 컬럼 데이터를
 * 가지도록 조작한 두 개의 데이터 소스를 생성한다.
 * <p/>
 * 실전 환경에서는 writeDataSource는 Master DB를, readDataSource는 Slave DB를 바라보는 커넥션 풀이어야 한다.
 */

@Configuration
@ComponentScan
public class ContextDataSource {

@Bean(destroyMethod="close")
public DataSource wirteDataSource(){
BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
basicDataSource.setUrl("jdbc:mysql://192.168.0.1/dbName");
basicDataSource.setUsername("daisy");
basicDataSource.setPassword("2016Daisy!");
return basicDataSource;
}

@Bean(destroyMethod="close")
public DataSource readDataSource(){

BasicDataSource basicDataSource = new BasicDataSource();
basicDataSource.setDriverClassName("com.mysql.jdbc.Driver");
basicDataSource.setUrl("jdbc:mysql://192.168.0.1/dbName");
basicDataSource.setUsername("daisy");
basicDataSource.setPassword("2016Daisy!");
return basicDataSource;
}
 
    @Autowired
    @Bean
    public DataSource dataSourceSpied(@Qualifier("wirteDataSource") DataSource writeDataSource, @Qualifier("readDataSource") DataSource readDataSource) {
        return new LazyReplicationConnectionDataSourceProxy(writeDataSource, readDataSource);
    }

    @Primary
    @Bean
    public DataSource dataSource(@Qualifier("dataSourceSpied") DataSource  datasource) {
     return new Log4jdbcProxyDataSource(datasource);
    }
}


잘된듯 잘된듯.. 하다. 무엇인가 새로운 벽에 도달 할 것으로 보여진다. 

아.. Query 로그 보기 쉽게 하기 위해 

<dependency>
    <groupId>org.lazyluke</groupId>
    <artifactId>log4jdbc-remix</artifactId>
    <version>0.2.7</version>
</dependency>

DataSource 에 log4jdbc remix 설정

첫 셋팅이다 보니 이상한게 한두개가 아니네. 

댓글 없음:

댓글 쓰기