저작권 안내: 저작권자표시 Yes 상업적이용 No 컨텐츠변경 No

스프링4 입문

스프링 4

DDD Start

객체 지향과
디자인 패턴

JSP 2.3

JPA 입문

스프링부터 다중 데이터소스 설정 방법은 간단하다. 먼저 application.properties 파일에 "구분.datasource"로 시작하는 데이터소스 설정을 추가한다. 다음은 예이다.



# datasource 1

spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

spring.datasource.url=jdbc:oracle:thin:@10.xx.xx.xx:SID

spring.datasource.username=dbuser

spring.datasource.password=dbpw


spring.datasource.tomcat.initialSize=5

spring.datasource.tomcat.maxActive=40

spring.datasource.tomcat.maxIdle=40

spring.datasource.tomcat.minIdle=5

spring.datasource.tomcat.maxWait=5

spring.datasource.tomcat.validationQuery=select 1+1 from dual

spring.datasource.tomcat.testWhileIdle=true

spring.datasource.tomcat.timeBetweenEvictionRunsMillis=60000


# datasource 2

sms.datasource.driver-class-name=com.microsoft.sqlserver.jdbc.SQLServerDriver

sms.datasource.url=jdbc:sqlserver://10.xx.xx.xx:1433;databaseName=SMS

sms.datasource.username=dbuser1

sms.datasource.password=dbpw1


sms.datasource.tomcat.initialSize=1

sms.datasource.tomcat.maxActive=20

sms.datasource.tomcat.maxIdle=20

sms.datasource.tomcat.minIdle=1

sms.datasource.tomcat.maxWait=1

sms.datasource.tomcat.validationQuery=select 1

sms.datasource.tomcat.testWhileIdle=true

sms.datasource.tomcat.timeBetweenEvictionRunsMillis=60000


이 코드는 spring.datasource로 시작하는 데이터소스와 sms.datasource로 시작하는 데이터소스를 설정했다. "구분.datasource.tomcat"으로 시작하는 설정은 톰캣 DBCP 설정이다.


스프링부트는 별도 설정을 하지 않으면 spring.datasource로 시작하는 설정만 데이터소스로 사용하므로, 다중 데이터소스를 사용하려면 별도 설정을 추가해야 한다. 다음은 다중 데이터소스를 위한 자바 설정 예이다.


@Configuration

public class DataSourceConfiguration {


    @Bean

    @ConfigurationProperties(prefix = "spring.datasource")

    public DataSourceProperties dataSourceProp() {

        return new DataSourceProperties();

    }


    @Primary

    @Bean(name = "dataSource")

    @ConfigurationProperties(prefix = "spring.datasource.tomcat")

    @Qualifier("primary")

    public DataSource dataSource() {

        return dataSourceProp().initializeDataSourceBuilder().build();

    }


    @Primary

    @Bean(name = "transactionManager")

    @Qualifier("primary")

    public PlatformTransactionManager transactionManager() {

        return new DataSourceTransactionManager(dataSource());

    }


    @Bean

    @ConfigurationProperties(prefix = "sms.datasource")

    public DataSourceProperties smsDataSourceProp() {

        return new DataSourceProperties();

    }


    @Bean(name = "smsDataSource")

    @ConfigurationProperties(prefix = "sms.datasource.tomcat")

    @Qualifier("sms")

    public DataSource smsDataSource() {

        return smsDataSourceProp().initializeDataSourceBuilder().build();

    }


    @Bean(name = "smsTransactionManager")

    @Qualifier("sms")

    public PlatformTransactionManager smsTransactionManager() {

        return new DataSourceTransactionManager(smsDataSource());

    }



각 데이터소스 설정별로 세 개의 빈을 설정했다.

  • 설정 프로퍼티를 담은 DataSourceProperties 빈
    • @ConfigurationProperties를 사용해서 접두어를 지정(예, smsDataSourceProp() 빈 설정은 @ConfigurationProperties의 prefix 값으로 sms.datasource 사용)
  • DataSourceProperties 빈을 이용해서 DataSource 빈 생성
    • DataSourceProperties의 initializeDataSourceBuilder() 메서드를 이용해서 생성해야 tomcat 설정이 적용
  • 각 DataSource 마다 트랜잭션관리자 생성
    • 글로벌 트랜잭션을 사용해야 하면 JTA 트랜잭션 설정


저작자 표시 비영리 변경 금지
신고
Posted by 최범균 madvirus

댓글을 달아 주세요

페이스북 친구들과 댓글을 공유하고 싶다면 아래를 이용해주세요.

티스토리 툴바