Я извлекаю данные из двух разных баз данных, используя MyBatis 3.3.1 и Spring 4.3. Два класса конфигурации для сканирования картостроители посмотреть на следующее:MyBatis + Spring MapperScan с Mulitple Источники данных
@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 работ. Когда я пытаюсь использовать mapper из источника данных 2, я получаю исключение «Нет таблицы найдено» из моей базы данных. Проблема в том, что, хотя я устанавливаю конкретный SqlSessionFactory, который я хочу использовать в mapperScan, он заканчивает использование другого SqlSessionFactory для всех картографов. Если я закомментирую SqlSessionFactory в конфигурации 1, то конфигурация 2 будет работать.
Обратите внимание, что если я не использую MapperScan, но вместо этого использую компонент MapperScannerConfigurer, я могу правильно извлекать данные.
У кого-нибудь еще были проблемы с использованием @MapperScan с несколькими источниками данных?