1. 개요
몇개의 프로젝트를 통합하는 작업을 진행하게 되었습니다. SK프레임워크와 전자정부 프레임워크 2.0으로 되어있는 녀석인데 서로 다른 프로젝트를 통합하다보니 다양한 데이터베이스에 대한 지원이 필요했습니다. 그리고 앞으로도 자주 있을 작업 같은데 까먹을 것 같아 적어봅니다.2. 설정방법
설정방법은 간략하게 파일별로 기술하겠습니다.가) context-datasource.xml
우선 연결에 사용할 데이터의 환경정보를 입력합니다.
<? xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http:www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="데이터소스ID1" class="org.apache.commons.dbcp.BasicDatasource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">
<property name="url" value="데이터베이스 접속정보1">
<property name="username" value="접속id">
<property name="password" value="접속비번">
</bean>
<bean id="데이터소스ID2" class="org.apache.commons.dbcp.BasicDatasource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">
<property name="url" value="데이터베이스 접속정보2">
<property name="username" value="접속id">
<property name="password" value="접속비번">
</bean>
</beans>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http:www.springframework.org/schema/beans/spring-beans-2.5.xsd">
<bean id="데이터소스ID1" class="org.apache.commons.dbcp.BasicDatasource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">
<property name="url" value="데이터베이스 접속정보1">
<property name="username" value="접속id">
<property name="password" value="접속비번">
</bean>
<bean id="데이터소스ID2" class="org.apache.commons.dbcp.BasicDatasource" destroy-method="close">
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver">
<property name="url" value="데이터베이스 접속정보2">
<property name="username" value="접속id">
<property name="password" value="접속비번">
</bean>
</beans>
나) context-sqlMap.xml
다음은 접속정보와 sqlMap을 연동해줍니다.이때 주의해야 할 점은 데이터 소스별로 SqlMapClient의 경로를 다르게 지정해야 합니다.
<? xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http:www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans http:www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.5.xsd">
<bean id="클라이언트ID1" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocations">
<list>
<value>classpath:/egovframework/경로1/*.xml</value>
</list>
</property>
<property name="dataSource" ref="데이터소스ID1" />
</bean>
<bean id="클라이언트ID2" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="configLocations">
<list>
<value>classpath:/egovframework/경로2/*.xml</value>
</list>
</property>
<property name="dataSource" ref="데이터소스ID2" />
</bean>
</beans>
다) DAO설정
egovFramework에서는 기본 datasource로 설정된 데이터베이스를 이용하는 것 같습니다. 따라서 첫번째 datasource로 지정된 데이터베이스를 사용 할 경우 DAO에 작업을 하지 않아도 자동으로 사용됩니다. 반면 2번째 데이터 소스를 사용 할 경우 DAO클래스에 선언을 해주어야 합니다. 물론 DAO가 달라지므로 IMPL과 SERVICE를 모두 작성해주어야 합니다.
package egovframework.rte.....
import ......
@repository("DAO이름")
public Class DAO이름 extends EgovAbstractDAO{
@Resource(name = "클라이언트ID2")
public void setSuperSqlMapClient(SqlMapClient sqlMapClient){
super.setSqlMapClient(sqlMapClient);
}
public List .......
...
...
import ......
@repository("DAO이름")
public Class DAO이름 extends EgovAbstractDAO{
@Resource(name = "클라이언트ID2")
public void setSuperSqlMapClient(SqlMapClient sqlMapClient){
super.setSqlMapClient(sqlMapClient);
}
public List .......
...
...
3.잘못된 설정으로 발생할 수 있는 오류
가) DAO에 sqlMapCLient 를 등록하지 않고 SQL을 호출한경우
등록된 SQL맵의 ID를 찾을 수 없습니다. 라는 메시지가 화면 호출시 발생합니다.
There is no statement name 호출된 SQL ID in this SqlMap
DAO 클래스의 내용을 확인해보세요.나) SqlMapConfig에 잘못된 파일명이나 경로를 등록한경우
sqlMapConfig/sqlMap 경로에 작성된 파일을 점검해보세요 .
Could not find resource egovframework/sqlmap-xml/......
context-sqlMap.xml 파일에 등록되어있는 xml파일중 비정상적인 경로를 가진 xml이 있습니다.다) context-sqlMap.xml 파일에 잘못된 정보가 기입된경우
SQL맵을 찾을 수 없다는 오류가 발생할 수 있습니다.
Error creating bean with name "클라이언트ID2" defined in file ......
라) dataSource의 정보가 잘못된경우
커넥션 오류가 발생합니다. 접속정보를 확인 하시면 됩니다.
The Connection descriptor used by the client was : ......
마)sql문에 바인드 된 클래스가 잘못된경우
각 sql에서 오류가 발생합니다. 이 경우 오류가 발생한 파라미터로 class가 바인드된 sql map에서 클래스의 경로를 확인해주세요.
java.lang.runtimeEception : Error parsing XPath 'sqlMapConfig/sqlMap': ......
java.lang.RuntimeException : Error parsing XML. Cause: java.lang.RuntimeException : Error Parsing Xpath '/sqlMap/select'. Cause: com.ibatis.sqlmap.client.SqlMapException :
java.lang.RuntimeException : Error parsing XML. Cause: java.lang.RuntimeException : Error Parsing Xpath '/sqlMap/delete'. Cause: com.ibatis.sqlmap.client.SqlMapException :
java.lang.RuntimeException : Error parsing XML. Cause: java.lang.RuntimeException : Error Parsing Xpath '/sqlMap/update'. Cause: com.ibatis.sqlmap.client.SqlMapException :
java.lang.RuntimeException : Error parsing XML. Cause: java.lang.RuntimeException : Error Parsing Xpath '/sqlMap/insert'. Cause: com.ibatis.sqlmap.client.SqlMapException :
java.lang.RuntimeException : Error parsing XML. Cause: java.lang.RuntimeException : Error Parsing Xpath '/sqlMap/select'. Cause: com.ibatis.sqlmap.client.SqlMapException :
java.lang.RuntimeException : Error parsing XML. Cause: java.lang.RuntimeException : Error Parsing Xpath '/sqlMap/delete'. Cause: com.ibatis.sqlmap.client.SqlMapException :
java.lang.RuntimeException : Error parsing XML. Cause: java.lang.RuntimeException : Error Parsing Xpath '/sqlMap/update'. Cause: com.ibatis.sqlmap.client.SqlMapException :
java.lang.RuntimeException : Error parsing XML. Cause: java.lang.RuntimeException : Error Parsing Xpath '/sqlMap/insert'. Cause: com.ibatis.sqlmap.client.SqlMapException :
이상입니다.
읽어주셔서 감사합니다.