전자정부프레임워크 egov ibatis 복수의 디비 커넥션 설정 방법
프로젝트를 수행하다 보면 각기 다른 데이터베이스 에서 데이터를 컨트롤 해야 하는 경우가 있습니다.
이럴경우 한 프로젝트 내에서 두개의 디비 커넥션을 연결하여 개발을 진행 해야하는데
그 방법을 알아보겠습니다.
[spec]
egov version : 3.5.1
ibatis 와 연동
복수의 디비 커넥션을 설정하기 위해선
context-datasource.xml
context-sqlMap.xml
sql-map-config.xml
egovAbstractDAO.java (class파일로 존재)
정도를 수정해 주면 됩니다.
이론적인 내용은 빼고 실무에서 바로 적용할 수 있게 진행하겠습니다.
src/main/resources/egovframework/spring/ 에 보시면 context-datasource.xml 이 있습니다.
여기서 두개의 커넥션을 연결할 디비의 정보를 각각 설정해 줍니다.
1
2
3
4
5
6
7
8
9
10
11
12
13 |
<bean id="dataSourceWeb" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}" />
<property name="username" value="${webusername}"/>
<property name="password" value="${webpassword}"/>
</bean>
<bean id="dataSourceBis" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="${driver}"/>
<property name="url" value="${url}" />
<property name="username" value="${bisusername}"/>
<property name="password" value="${bispassword}"/>
</bean> |
cs |
저는 properties 에 각 정보를 따로 빼두어 진행 하였기 때문에 위와 같이 설정하였고
그냥 하드 코딩 하셔도 됩니다.
후에 같은 위치에 있는 context-sqlMap.xml 파일을 열어 ibatis 설정을 해줍니다.
1
2
3
4
5
6
7
8
9 |
<bean id="sqlMapClientWeb" class="egovframework.rte.psl.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:/egovframework/sqlmap/sql-map-config-web.xml"/>
<property name="dataSource" ref="dataSourceWeb"/>
</bean>
<bean id="sqlMapClientBis" class="egovframework.rte.psl.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocation" value="classpath:/egovframework/sqlmap/sql-map-config-bis.xml"/>
<property name="dataSource" ref="dataSourceBis"/>
</bean> |
cs |
각각의 커넥션에서 사용할 sql-map-config 파일의 위치와 context-datasource.xml 에서 설정한 bean id를 매핑합니다.
이제 기존에 있던 sql-map-config.xml 파일을 디비 커넥션 수에 맞게 복사를 합니다.
예)
1
2
3
4
5
6
7
8
9
10
11 |
sql-map-config-web.xml 내용↓
<sqlMapConfig>
<sqlMap resource="egovframework/sqlmap/oracle/web/web_sql.xml"/>
</sqlMapConfig>
sql-map-config-bis.xml 내용↓
<sqlMapConfig>
<sqlMap resource="egovframework/sqlmap/oracle/bis/web_sql.xml"/>
</sqlMapConfig> |
cs |
그리고 위와같이 각각의 사용될 쿼리가 있는 xml의 경로를 추가 해줍니다.
마지막으로 전자정부프레임워크에서 ibatis 설정이 되어 있는 EgovAbstractDAO를 찾습니다.
기존에 전자정부 웹 프로젝트를 소스포함해서 생성하시면 샘플 DAO 에서
extends 되어 있는 것을 확인할 수 있습니다. (이클립스에서 커서를 올리고 F3을 누르면 해당 클래스로 이동)
그럼 그 내용을 복사하여 DAO를 커낵션 수만큼 생성하고 복사한 EgovAbstractDAO의 내용을 붙여넣습니다.
ex)
원하는 위치에 BisAbstractDAO.java, WebAbstractDAO 생성
EgovAbstractDAO 내용 붙여넣기
마지막으로 context-sql.xml 에서 설정한 bean id(sqlMapClientWeb, sqlMapClientBis)와
붙여넣기 한 내용에서 리소스 이름을 매핑합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13 |
//ex) BisAbstractDAO.java
@Resource(name = "sqlMapClientBis")
public void setSuperSqlMapClient(SqlMapClient sqlMapClient) {
super.setSqlMapClient(sqlMapClient);
}
//ex) WebAbstractDAO.java
@Resource(name = "sqlMapClientWeb")
public void setSuperSqlMapClient(SqlMapClient sqlMapClient) {
super.setSqlMapClient(sqlMapClient);
} |
cs |
이제 복수의 디비 커낵션을 연결할 설정은 끝났습니다.
기존의 DAO에서 extends하던 EgovAbstractDAO 를 커넥션하기를 원하는 DAO로 연결하여 사용하면 됩니다.
ex)
EgovAbstractDAO => WebAbstractDAO or EgovAbstractDAO => BisAbstractDAO
댓글