개발 환경 :
-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명") 설정하여 해결 완료
'프레임워크 > SpringFramework' 카테고리의 다른 글
대량 데이터 insert 시 library cache: mutex X 오류 발생 (0) | 2025.02.17 |
---|---|
ThreadPool을 이용한 동시성 처리 (0) | 2025.02.07 |
Transaction propogation과 DB for update wait 삽질 (0) | 2024.05.31 |
SQL 로그 출력 셋팅 시 오류 문제. (0) | 2021.08.29 |
thymeleaf 웹 페이지 오류 (0) | 2021.08.16 |