1

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

    @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 を複数のデータ ソースで使用する際に問題が発生した人はいますか?

4

1 に答える 1