Collective Intelligence

[MyBatis] 여러 DB 연결 설정 본문

개발/Spring Framework

[MyBatis] 여러 DB 연결 설정

유경파 2016. 3. 31. 19:49

특정 목적에 따라 하나의 서비스 이지만 한 서버에서 여러 DB에 접속을 해야 하는 경우가 있다.

현재 서비스 중인 솔루션 중에 하나의 요청을 처리하는데 3개의 각기 다른 DB를 사용해야 하는 경우가 있었다.

방법은 다음과 같다.


나는 지금 spring-mybatis.xml 이라는 곳에 datasource 설정을 하고 있는데 간단하게 이 설정을 여러개 해주면 된다.

여러 종류의 DB (SQL Server, Oracle 등)을 따로따로 설정할 수 있다.

그리고 sqlSessionFactory 에 datasource와 그걸 사용하게 될 mapper 파일을 정의하면 된다.

이 설정이 끝나고 난 후, 해당 DB를 사용할 mapper를 잘 분리해서 만들면 바로 작동하게 되므로 간단하다.

mapper 의 설정에 따라 하나의 DAO를 여러 DB에 사용할 수도 있다.

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName">
   <value>${jdbc.driverClassName}</value>
  </property>
  <property name="url">
   <value>${jdbc.url}</value>
  </property>
  <property name="username">
   <value>${jdbc.username}</value>
  </property>
  <property name="password">
   <value>${jdbc.password}</value>
  </property>
  <property name="initialSize" value="5" />
  <property name="maxActive" value="10" />
  <property name="testOnBorrow" value="true" />
  <property name="validationQuery" value="SELECT 1" />
 </bean>

 <!-- Second Datasource -->
 <bean id="dataSource-2" class="org.apache.commons.dbcp.BasicDataSource"
  destroy-method="close">
  <property name="driverClassName">
   <value>${jdbc2.driverClassName}</value>
  </property>
  <property name="url">
   <value>${jdbc2.url}</value>
  </property>
  <property name="username">
   <value>${jdbc2.username}</value>
  </property>
  <property name="password">
   <value>${jdbc2.password}</value>
  </property>
  <property name="initialSize" value="5" />
  <property name="maxActive" value="10" />
  <property name="testOnBorrow" value="true" />
  <property name="validationQuery" value="SELECT 1" />
 </bean>



<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
  p:dataSource-ref="dataSource" p:configLocation="classpath:conf/mybatis-config.xml"
  p:mapperLocations="classpath*:sqlmap/mapper-1/*.xml" />  

  //sqlmap/mapper-1 폴더 아래의 모든 .xml 파일은 dataSource 설정사용

 <bean id="sqlSessionFactory-2" class="org.mybatis.spring.SqlSessionFactoryBean"
  p:dataSource-ref="dataSource-2" p:configLocation="classpath:conf/mybatis-config.xml"
  p:mapperLocations="classpath*:sqlmap/mapper-2/*.xml" />

  //sqlmap/mapper-2 폴더 아래의 모든 .xml 파일은 dataSource-2 설정사용