[전자정부프레임워크] iBatis 다중 Datasource 사용법
- DB/ibatis, mybatis
- 2020. 7. 28.
전자정부프레임워크(EgovFramework)는 EgovAbstractDAO라는 것을 상속해서 다중 DataSource를 사용할 수 있다.
우선, context-datasource.xml을 열어서, dataSource를 한개 더 만든다.
<!-- test1 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/test?serverTimezone=UTC" />
<property name="username" value="xxxx"/>
<property name="password" value="xxxx" />
</bean>
<!-- test2 -->
<bean id="spectrumDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://xx.xx.xx.xx:3306/spectrum?serverTimezone=UTC" />
<property name="username" value="xxxx"/>
<property name="password" value="xxxx" />
</bean>
위와 같이, datasource를 우선 2개 만든다. 그리고, context-sqlMap.xml을 열어서 마찬가지로 Client를 한개 더 생성한다.
<!-- SqlMap setup for iBATIS Database Layer -->
<bean id="sqlMapClient" class="egovframework.rte.psl.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:/egovframework/sqlmap/sql-map-config.xml"/>
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- SqlMap setup for iBATIS Database Layer -->
<bean id="spectrumSqlMapClient" class="egovframework.rte.psl.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:/egovframework/sqlmap/spectrum-sql-map-config.xml"/>
<property name="dataSource" ref="spectrumDataSource"/>
</bean>
원래 있던 sqlMapClient와 spectrumSqlMapClient라는 신규 이름의 클라이언트 bean을 생성하였다(당연히 신규 bean은 본인들이 맞게 설정한다) 그리고 위 설정에 맞게 sqlmap 위치에 spectrum-sql-map-config.xml을 생성한다
<sqlMapConfig>
<sqlMap resource="egovframework/sqlmap/mappers/Spectrum_SQL.xml"/>
</sqlMapConfig>
Spectrum_SQL.xml이라는 mapper를 생성하였다 (각자 맞는 방법을 생성하면 된다) 여기까지는 쉽게 될텐데 문제는 DAO 단에서 EgovAbstractDAO를 상속받게 되면, sqlMapClient Bean을 호출하게 된다는 것이다.
@SuppressWarnings("deprecation")
public abstract class EgovAbstractDAO extends SqlMapClientDaoSupport {
/**
* EgovAbstractDAO �뒗 base class 濡쒕쭔 �궗�슜�릺硫� �빐�떦 �씤�뒪�꽩�뒪瑜� 吏곸젒 �깮�꽦�븷 �닔 �뾾�룄濡� protected constructor 濡� �꽑�뼵�븯���쓬.
*/
protected EgovAbstractDAO() {
// PMD abstract Rule
// - If the class is intended to be used as a base class only (not to be instantiated directly)
// a protected constructor can be provided prevent direct instantiation
}
/**
* Annotation �삎�떇�쑝濡� sqlMapClient 瑜� 諛쏆븘�� �씠瑜� super(SqlMapClientDaoSupport) �쓽 setSqlMapClient 硫붿꽌�뱶瑜� �샇異쒗븯�뿬 �꽕�젙�빐 以��떎.
*
* @param sqlMapClient - ibatis �쓽 SQL Map 怨쇱쓽 �긽�샇�옉�슜�쓣 �쐞�븳 湲곕낯 �겢�옒�뒪濡�
* mapped statements(select, insert, update, delete �벑)�쓽 �떎�뻾�쓣 吏��썝�븿.
*/
@Resource(name = "sqlMapClient")
public void setSuperSqlMapClient(SqlMapClient sqlMapClient) {
super.setSqlMapClient(sqlMapClient);
}
setSuperSqlMapClient를 보면 "sqlMapClient"를 상속한다는 것을 볼 수 있다. 우리는 이를 통해 다른 sqlMapClient를 바라보는 EgovAbstractDAO를 하나 더 만들어야 된다는 것을 알 수 있다.
package sai.universe.spectrum.dao;
import javax.annotation.Resource;
import com.ibatis.sqlmap.client.SqlMapClient;
import egovframework.rte.psl.dataaccess.EgovAbstractDAO;
/**
* Spectrum SqlMapClient를 호출하기 위한 클래스
*/
public class SpectrumAbstractDAO extends EgovAbstractDAO {
@Resource(name = "spectrumSqlMapClient")
public void setSuperSqlMapClient(SqlMapClient sqlMapClient) {
super.setSuperSqlMapClient(sqlMapClient);
}
}
SepctrumAbstractDAO라는 EgovAbstractDAO를 상속받는 새로운 DAO 클래스를 생성하였다. 상속받은 신규 클래스로 데이터를 호출하는 DAO에 사용하면 이제 다중 설정을 사용할 수 있게 된다.
@Repository("spectrumDAO")
public class SpectrumDAO extends SpectrumAbstractDAO {
...
}
'DB > ibatis, mybatis' 카테고리의 다른 글
[전자정부프레임워크] 2개 이상의 DB를 연동하는 법 (0) | 2019.08.19 |
---|