본문 바로가기
Programing/Java & Spring

[SPRING3.0] 데이터 엑세스 기술①

by 슈퍼와이비 2013. 9. 3.
반응형


복수의 DB를 설정하려면 몇가지 고려사항이 있다.

DB가 여러개일 경우 각 DB가 종속적이라면 JTA를 이용하여 글로벌/분산 트랜잭션을 구현해야 한다.

하지만 DB가 여러개라도 완전히 독립적인 형태를 가지고 있을 경우 각각 트랜잭션매니저를 등록해야 한다.

두개 이상의 DB가 서로 독립적인 형태를 유지할때에는

①DataSource, ②DAO, ③TransactionManager 가 한쌍이 되도록 등록해야 한다.




<!-- DataSource 설정 -->

<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>

<property name="url" value="jdbc:oracle:thi    n:@db1:1521:orcl"/>

<property name="username" value="test"/>

<property name="password" value="test"/>

</bean>

<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver"/>

<property name="url" value="jdbc:oracle:thin:@db2:1521:orcl"/>

<property name="username" value="test2"/>

<property name="password" value="test2"/>

</bean>


<!-- iBatis sqlMap 설정 -->

<bean id="oraclSqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

<property name="configLocation" value="classpath:sqlmap/sql-map-config.xml" />    

  <property name="mappingLocations" value="classpath:sqlmap/sql-cms-*.xml"/>

<property name="dataSource" ref="dataSource1" />

</bean>

<bean id="otherSqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">

<property name="configLocation" value="classpath:sqlmap/sql-map-config.xml" />    

  <property name="mappingLocations" value="classpath:sqlmap/sql-web-*.xml"/>

<property name="dataSource" ref="dataSource2" />

</bean>


<!-- 트랜잭션 매니저 설정 -->

<bean id="transactionManger1" class="jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource1" />

</bean>

<bean id="transactionManger2" class="jdbc.datasource.DataSourceTransactionManager">

<property name="dataSource" ref="dataSource2" />

</bean>




SqlMapClientDaoSupport 를 상속한 클래스에 @Resource 어노테이션을 사용하여 빈이 등록되도록 한다.





public class OracleAbstractDao extends SqlMapClientDaoSupport {

//DB지정

@Resource(name="oracleSqlMapClient")

public void setSuperSqlMapClient(SqlMapClient sqlMapClient) {

super.setSqlMapClient(sqlMapClient);

}

}


public class OtherAbstractDao extends SqlMapClientDaoSupport {

//DB지정

@Resource(name="otherSqlMapClient")

public void setSuperSqlMapClient(SqlMapClient sqlMapClient) {

super.setSqlMapClient(sqlMapClient);

}

}





DAO 사용시 클래스를 상속받아 사용한다.

public class SampleDAO extends OracleAbstractDao { ....... }

public class SampleDAO extends OtherAbstractDao { ....... }


반응형