[전자정부프레임워크] iBatis 다중 Datasource 사용법

    전자정부프레임워크(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 {
    	...
    }

     

     

    반응형

    댓글

    Designed by JB FACTORY