개발 환경 : 
  -SpringFramework 3.1.1. Release

1. applicationContext.xml 파일 설정(굵은/붉은 글씨들은 각자의 상황에 맞게 변경 가능한 변수명 개념)

<bean id ="dataSource1" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
  <property name="driverClass" vlaue="oracle.jdbc.OracleDriver"/>
  < property name="url" vlaue="jdbc:oracle:thin:@IP:PORT:SID"/>
  <property name="username" vlaue="아이디"/>
  <property name="password" vlaue="비밀번호"/>
</bean>

<bean id="dataSource2" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
  <property name="driverClass" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
  <property name="url" value="jdbc:sqlserver://IP:PORT;databaseName=데이터베이스명;trustServerCertificate=true"/>
  <property name="username" value="아이디"/>
  <property name="password" value="비밀번호"/>  
</bean>
 

<bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource1"/>
  <property name="mapperLocations" value="classpath*:매퍼가 들어가 있는 패키지명/*.xml"/>
</bean>
<bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean">
  <property name="dataSource" ref="dataSource2"/>
  <property name="mapperLocations" value="classpath*:2번째DB를 연결할 매퍼가 들어가 있는 패키지명/*.xml"/>
</bean>

<bean id="sqlSessionTemplate1" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg ref="sqlSessionFactory1"></constructor-arg>
</bean>
<bean id="sqlSessionTemplate2" class="org.mybatis.spring.SqlSessionTemplate">
  <constructor-arg ref="sqlSessionFactory2"></constructor-arg>
</bean>

<bean id="1MapperScannerConfigurer" class="org.mybatis.spring.mapper.MapperScannerConfigurer">
  <property name="basePackage" value="1번 database연결할 패키지위치"/>
  <property name="sqlSessionTemplateBeanName" value="sqlSessionTemplate1"/>
</bean>
<bean id="2MapperScannerConfigurer" class="~~~>
  ~~~~
</bean>

<bean id="transactionManager1" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
  <property name="dataSource" ref="dataSource1"/>
</bean>
<bean id="transactionManager2" class="~~나머지는 동일>
</bean>

<tx:annotation-driven transaction-manager="transactionManager1"/>
<tx:annotation-driven ~~동일/>

발생했던 오류 상황

1. 2번째 Database를 사용하는 mapper bean injection 시 2개의 sessionFactory가 발견되어 매칭 불가 상황

  => mapper에 2번째 DB sessionFactory를 강제 주입(Qualifier 어노테이션 이용)
<bean id="Mapper bean명" class="org.mybatis.spring.mapper.MapperFactoryBean">
  <property name="mapperInterface" value="dataSource2를 사용하는 Mapper 인터페이스 위치"/>
  <property name="sqlSessionFactory" ref=sqlSessionFactory2"/>
</bean>
 그리고 mapper interface위에 Qualifier("Mapper bean명") 설정하여 해결 완료

Posted by 知彼知己百戰不殆
,