2011-01-20 3 views
4

내 응용 프로그램은 Spring3 + MyBatis3을 사용합니다. 나는 그것을 위해 여러 개의 데이터 소스를 설정하려고합니다. 로그에서스프링 및 Mybatis 다중 데이터 소스 설정

<!-- db1 setup--> 
<bean id="db1SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" 
    p:configLocation="WEB-INF/mybatis/sqlMapConfig.xml" 
    p:dataSource-ref="db1DataSource" /> 
<bean id="db1SqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 
    <constructor-arg ref="db1SqlSessionFactory"/> 
</bean> 
<!-- db2 setup --> 
<bean id="db2SqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" 
    p:configLocation="WEB-INF/mybatis/sqlMapConfig.xml" 
    p:dataSource-ref="db2DataSource" /> 
<bean id="db2SqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate"> 
    <constructor-arg ref="db2SqlSessionFactory"/> 
</bean> 

, 나는이 메시지를 발견했습니다 : 설치처럼 보이는

No unique bean of type [org.apache.ibatis.session.SqlSessionFactory] is defined: expected single matching bean but found 2: [db1SqlSessionFactory, db2SqlSessionFactory] 

내가 봤와 MyBatis로 매뉴얼로 보았다하지만 어떻게 방법을 찾을 수 없습니다를 설치 MyBatis로 여러 데이터 소스에 . 아이디어가 있으십니까?

답변

2

해결, 문제는 내가 직접 SqlSessionFactory는 또한 해결

<bean id="myDao" class="org.mybatis.spring.mapper.MapperFactoryBean" 
    p:sqlSessionTemplate-ref="db1SqlSessionTemplate" 
    p:mapperInterface="my.project.domain.dao.MyDao" 
    p:sqlSessionFactory-ref="db1SqlSessionFactory"/> 
+0

템플릿과 팩토리를 모두 설정하지 않아도됩니다. MyBatis-Spring 1.0 최종 버전입니까? 그렇지 않다면 SqlSessionTemplate 값만 설정하여 업그레이드하고 시도 할 수 있습니까? – AngerClown

4

에 참조 지정해야했다! 단지 MapperScannerConfigurer에 공장 빈을 참조 : sqlSessionFactoryBeanName >>>>>>>

먼저 데이터 소스

<bean id="dataSource1" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 

<bean id="sqlSessionFactory1" class="org.mybatis.spring.SqlSessionFactoryBean"> 
     <property name="dataSource" ref="dataSource1"/> 
</bean> 

<bean id="MapperScannerConfigurer1" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
     <property name="basePackage" value="com.package.p1"/> 
     <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory1"/> 
    </bean> 

두 번째 데이터 소스 >>>>>>

<bean id="dataSource2" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
<bean id="sqlSessionFactory2" class="org.mybatis.spring.SqlSessionFactoryBean"> 
      <property name="dataSource" ref="dataSource2"/> 
    </bean> 
<bean id="MapperScannerConfigurer1" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 
      <property name="basePackage" value="com.package.p2"/> 
      <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory2"/> 
</bean> 
0

DAO를 구현에서 SqlSessionDaoSupport 대신 SqlSessionTemplate을 사용하십시오. 콩 db1SqlSessionTemplate 또는 db2SqlSessionTemplate을 주입하십시오.

@Repository 
public class TestDaoImpl implements TestDao{ 
    @Autowired 
    private SqlSession db1SqlSessionTemplate; 
    ... 
    db1SqlSessionTemplate.selectList("testSelect"); 
    ... 
} 

당신이 SqlSession를 사용하는 것이 상황에 맞는 봄 모르는 SqlSessionDaoSupport을 확장.

관련 문제