mybatis 다중 datasource 사용은 어떻게 해야하나요?
- 작성자 :
- 박*현
- 작성일 :
- 2013-10-14 19:59:29
- 조회수 :
- 2,627
- 구분 :
- 개발환경
- 진행상태 :
- 완료
Q
egovframework 2.6으로 새 프로젝트를 구성중입니다.
DB를 여러개 사용을 해야 하는데요
datasource도 여러개 생성하고 sqlsessiontemplate등도 각각 생성하였지만
Mapper에서 sqlsession을 제대로 가지고 오지 못하는 현상이 있었습니다..
죄송하지만 방법을 알려주시면 감사하겠습니다.
DB를 여러개 사용을 해야 하는데요
datasource도 여러개 생성하고 sqlsessiontemplate등도 각각 생성하였지만
Mapper에서 sqlsession을 제대로 가지고 오지 못하는 현상이 있었습니다..
죄송하지만 방법을 알려주시면 감사하겠습니다.
A
안녕하세요.
표준프레임워크센터입니다.
해당 로그를 함께 올려주시면 더 정확한 답변을 얻으실 수 있습니다.
현재 질문에 대한 결론을 말씀드리면,
표준프레임워크를 활용한 MyBatis 적용 시에는
SqlSessionTemplate를 직접 생성하실 필요가 없습니다.
SqlSessionTemplate을 생성하시는 대신
EgovAbstractMapper를 상속해서 DAO클래스를 작성하시면 됩니다.
먼저 스프링에서 MyBatis 사용을 위한 설정은
SqlSessionFactoryBean에서 생성하는 SqlSession을 빈으로 등록하고,
생성하신 여러 개의 dataSource를 각 SqlSession 빈 프로퍼티로 지정해주시면 됩니다.
(아래참고)
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
...
</bean>
<bean id="otherSqlSession" class=""org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="otherDataSource" />
...
</bean>
...
<bean id="dataSource" class="...">
<bean id="otherDataSource" class="...">
표준프레임워크에서 MyBatis 활용방법에 대해 설명드리겠습니다.
(참고URL) http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:psl:dataaccess:mybatisguide
첫번째 방법은,
위에서 말씀드린대로 표준프레임워크에서 제공하는 EgovAbstractMapper를 상속하여 DAO클래스를 작성하시는 방법입니다.
DAO클래스에서 아래 메서드를 재정의하시면 위에서 등록한 개별 SqlSession 객체를 사용할 수 있습니다.
@Resource(name = "otherSqlSession")
public void setSqlSessionFactory(SqlSessionFactory sqlSession) {
super.setSqlSessionFactory(sqlSession);
}
두번째 방법은,
Mapper 인터페이스를 활용한 방법으로
제시한 가이드에 따라 Mapper인터페이스를 작성해주시고,
MapperConfigurer 빈설정 시 아래와 같이 변경해주시면 됩니다.
<bean class="egovframework.rte.psl.dataaccess.mapper.MapperConfigurer">
<property name="basePackage" value="풀패키지명" />
<property name="sqlSessionFactoryBeanName" ref="sqlSession" />
</bean>
<bean class="egovframework.rte.psl.dataaccess.mapper.MapperConfigurer">
<property name="basePackage" value="풀패키지명" />
<property name="sqlSessionFactoryBeanName" ref="otherSqlSession" />
</bean>
...
이 때 DB별로 Mapper인터페이스를 구분하시고,
Mapper인터페이스가 담긴 해당 패키지를 지정해주시면 됩니다.
감사합니다.
표준프레임워크센터입니다.
해당 로그를 함께 올려주시면 더 정확한 답변을 얻으실 수 있습니다.
현재 질문에 대한 결론을 말씀드리면,
표준프레임워크를 활용한 MyBatis 적용 시에는
SqlSessionTemplate를 직접 생성하실 필요가 없습니다.
SqlSessionTemplate을 생성하시는 대신
EgovAbstractMapper를 상속해서 DAO클래스를 작성하시면 됩니다.
먼저 스프링에서 MyBatis 사용을 위한 설정은
SqlSessionFactoryBean에서 생성하는 SqlSession을 빈으로 등록하고,
생성하신 여러 개의 dataSource를 각 SqlSession 빈 프로퍼티로 지정해주시면 됩니다.
(아래참고)
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
...
</bean>
<bean id="otherSqlSession" class=""org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="otherDataSource" />
...
</bean>
...
<bean id="dataSource" class="...">
<bean id="otherDataSource" class="...">
표준프레임워크에서 MyBatis 활용방법에 대해 설명드리겠습니다.
(참고URL) http://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rte2:psl:dataaccess:mybatisguide
첫번째 방법은,
위에서 말씀드린대로 표준프레임워크에서 제공하는 EgovAbstractMapper를 상속하여 DAO클래스를 작성하시는 방법입니다.
DAO클래스에서 아래 메서드를 재정의하시면 위에서 등록한 개별 SqlSession 객체를 사용할 수 있습니다.
@Resource(name = "otherSqlSession")
public void setSqlSessionFactory(SqlSessionFactory sqlSession) {
super.setSqlSessionFactory(sqlSession);
}
두번째 방법은,
Mapper 인터페이스를 활용한 방법으로
제시한 가이드에 따라 Mapper인터페이스를 작성해주시고,
MapperConfigurer 빈설정 시 아래와 같이 변경해주시면 됩니다.
<bean class="egovframework.rte.psl.dataaccess.mapper.MapperConfigurer">
<property name="basePackage" value="풀패키지명" />
<property name="sqlSessionFactoryBeanName" ref="sqlSession" />
</bean>
<bean class="egovframework.rte.psl.dataaccess.mapper.MapperConfigurer">
<property name="basePackage" value="풀패키지명" />
<property name="sqlSessionFactoryBeanName" ref="otherSqlSession" />
</bean>
...
이 때 DB별로 Mapper인터페이스를 구분하시고,
Mapper인터페이스가 담긴 해당 패키지를 지정해주시면 됩니다.
감사합니다.