복수의 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 { ....... }
'Programing > Java & Spring' 카테고리의 다른 글
스프링(Spring) 에서 RequestURI, RequestURL 차이 (0) | 2023.09.08 |
---|---|
Java Default Method (디펄트 메소드) (0) | 2023.09.08 |
스프링(Spring)에서 RestTemplate, Https 통신 (0) | 2023.09.08 |
AOP(Aspect-Oriented Programming) 개념 및 예시 (0) | 2023.09.08 |
[JAVA] content-disposition (0) | 2013.12.31 |
[SPRING3.0] 메세지 처리 (0) | 2013.09.12 |
[SPRING3.0] 페이스북 공유하기① (0) | 2013.09.11 |
[SPRING3.0] 데이터 엑세스 기술② (0) | 2013.09.04 |
[SPRING3.0] 트랜잭션 설정 (0) | 2013.09.04 |
[JAVA] 파라미터 로그 찍기 (0) | 2013.06.26 |