분류

2019년 10월 29일 화요일

egovframework Datasource 여러개 사용

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="driverClassNamevalue="oracle.jdbc.driver.OracleDriver">
    <property name="urlvalue="데이터베이스 접속정보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">


<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 .......
      ...
      ...

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 : 


이상입니다.
읽어주셔서 감사합니다.

댓글 없음:

댓글 쓰기