2011-01-20 55 views
4

私のアプリケーションはSpring3 + MyBatis3を使用しています。私はそれのために複数のデータソースを設定しようとしています。セットアップは次のようになります。ログにSpringと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] 

私はGoogleで検索し、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であなたのファクトリーBeanを参照: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> 

2番目のデータソース>>>>>>

<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。コンテキスト春SqlSessionDaoSupportを拡張

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

は、あなたがSqlSessionを使用することを知りません。

関連する問題