2016-11-02 24 views
0

MyBatis 3.3.1とSpring 4.3を使用して2つの異なるデータベースからデータを取得しています。マッパーをスキャンする2つの設定クラスは、次のようになります。MyBatis + Mulitpleのデータソースを持つSpring MapperScan

@Configuration 
    @MapperScan(value="com.mapper1.map", 
    SqlSessionFactoryRef="sqlSessionFactory1") 
    public class AppConfig { 
    @Bean 
    public DataSource getDataSource1() { 
     BasicDataSource dataSource = new BasicDataSource(); 
     dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
     dataSource.setUrl("jdbc:mysql://localhost:3306/database1"); 
     dataSource.setUsername("user"); 
     dataSource.setPassword("pw"); 
     return dataSource; 
    } 
    @Bean 
    public DataSourceTransactionManager transactionManager1() { 
     return new DataSourceTransactionManager(getDataSource1()); 
    } 
    @Bean 
    public SqlSessionFactory sqlSessionFactory1() throws Exception { 
     SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); 
     sessionFactory.setDataSource(getDataSource1()); 
     return sessionFactory.getObject(); 
    } 
} 

    @Configuration 
    @MapperScan(value="com.mapper2.map", 
    SqlSessionFactoryRef="sqlSessionFactory2") 
    public class AppConfig { 
    @Bean 
    public DataSource getDataSource2() { 
     BasicDataSource dataSource = new BasicDataSource(); 
     dataSource.setDriverClassName("com.mysql.jdbc.Driver"); 
     dataSource.setUrl("jdbc:mysql://localhost:3307/database2"); 
     dataSource.setUsername("user"); 
     dataSource.setPassword("pw"); 
     return dataSource; 
    } 
    @Bean 
    public DataSourceTransactionManager transactionManager2() { 
     return new DataSourceTransactionManager(getDataSource2()); 
    } 
    @Bean 
    public SqlSessionFactory sqlSessionFactory2() throws Exception { 
     SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean(); 
     sessionFactory.setDataSource(getDataSource2()); 
     return sessionFactory.getObject(); 
    } 
} 

コードはデプロイされますが、データソース1のマッパーだけが動作します。データソース2からマッパーを使用しようとすると、データベースから「テーブルが見つかりません」という例外が発生します。問題は、mapperScanで使用したい特定のSqlSessionFactoryを設定しているにも関わらず、すべてのマッパーで他のSqlSessionFactoryを使用して終了するということです。構成1のSqlSessionFactoryをコメントアウトすると、構成2が機能します。

MapperScanを使用せず、代わりにMapperScannerConfigurer Beanを使用すると、データを正しく取得できることに注意してください。

複数のデータソースで@MapperScanを使用している人はいませんか?

答えて

0

コードに表示される唯一の問題は、SqlSessionFactoryRefです(小文字の場合はsqlSessionFactory)。それ以外はすべてがうまくいきますが、このアプローチは私のために働きます。

ace-mybatisもご覧ください。 1つのBeanのみを構成する複数のデータソースを扱うことができます。

関連する問題